2017-08-29 68 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.