2017-08-29 188 views
0

我正在嘗試爲測試目的創建100k以太幣錢包。所有人都應該使用相同的密碼短語,因爲現在沒關係。我用10個線程啓動了這個代碼,它凍結了我的macbook,我不得不重新啓動它。 3線程有點工作,但它仍然非常慢(每秒產生約6個錢包)。怎麼了?我使用web3j依賴在Java中使用10個線程生成以太坊錢包凍結電腦

public EthWallets(String[] args) 
    { 
     File destinationDir = new File("ethwallets/"); 
     if(args[1].equalsIgnoreCase("create")) { 
      try { 
       int count = Integer.valueOf(args[2]); 
       if(count > 10) 
       { 
        final int threadedCount = count/10; 
        for(int i = 0; i < 10; i++) 
        { 
         Thread t = new Thread() 
         { 
          @Override 
          public void run() { 
           for(int j = 0; j < threadedCount; j++) 
           { 
            create("passphph", destinationDir); 
           } 
          } 
         }; 
         t.start(); 
        } 
       } 
       else 
        for(int i = 0; i < count; i++) 
         create("passphph", destinationDir); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    public void create(String passPhrase, File destinationDirectory) 
    { 
     try { 
      String path = WalletUtils.generateFullNewWalletFile(passPhrase, destinationDirectory); 
//   Credentials credentials = WalletUtils.loadCredentials(passPhrase, new File(path)); 
//   System.out.println("address: " + credentials.getAddress()); 
//   System.out.println("private: " + credentials.getEcKeyPair().getPrivateKey()); 
//   System.out.println("public: " + credentials.getEcKeyPair().getPublicKey()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
+0

因爲您的處理器運行的線程太多,無法處理?使用更少的線程或更好的處理器 – konsolas

+0

是否真的有那麼多計算?這只是生成錢包的幾個加密函數 –

+0

你說你的問題是你的macbook凍結了。個人計算可能不是密集型的,但是其中的10萬個緊跟在一起。我假設你有一臺雙核心處理器/超線程的筆記本電腦,所以這項任務最大限度地減少了每一個線程,給操作系統和用戶界面留下了很小的空間。 – konsolas

回答

-1

我建議你去正如他所說的讀https://stackoverflow.com/a/1718522/5632150

這個答覆,可以產生線程的數量取決於事實,你的線程做或不做任何I/O操作。如果有的話,有一些方法可以優化這個問題。如果不是,我通常會做MAX_THREADS = N_CORES + 1.