小编Sub*_*ged的帖子

while(true)ServerSocket Listen的效率

我想知道一个典型的while(true)ServerSocket监听循环是否需要整个核心等待并接受客户端连接(即使实现runnable和使用Thread .start())

我正在实现一种分布式计算集群,每台计算机都需要它拥有的每个核心用于计算.主节点需要与这些计算机通信(调用修改算法功能的静态方法).

我需要使用套接字的原因是跨平台/跨语言功能.在某些情况下,PHP将调用这些java静态方法.

我使用了一个java profiler(YourKit),我可以看到我正在运行的ServerSocket监听线程,它永远不会睡觉而且它总是在运行.有没有更好的方法来做我想要的?或者,性能影响是否可以忽略不计?

如果你能想到一个更好的方法,请随时提供任何建议(我已尝试过RMI,但不支持跨语言.

感谢大家

java sockets performance multithreading core

9
推荐指数
2
解决办法
1万
查看次数

500个工作线程,什么样的线程池?

我想知道这是否是最好的方法.我有大约500个无限期运行的线程,但Thread.sleep在完成一个处理周期后会持续一分钟.

   ExecutorService es = Executors.newFixedThreadPool(list.size()+1);
   for (int i = 0; i < list.size(); i++) {
      es.execute(coreAppVector.elementAt(i)); //coreAppVector is a vector of extends thread objects
   }
Run Code Online (Sandbox Code Playgroud)

正在执行的代码非常简单,基本上就是这样

class aThread extends Thread {
   public void run(){
      while(true){
         Thread.sleep(ONE_MINUTE);
         //Lots of computation every minute
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

我确实需要为每个正在运行的任务使用单独的线程,因此不能选择更改体系结构.我尝试使我的threadPool大小等于Runtime.getRuntime().availableProcessors(),它试图运行所有500个线程,但只允许8(4xhyperthreading)执行.其他线程不会投降,让其他线程轮到他们.我尝试输入wait()并通知(),但仍然没有运气.如果有人有一个简单的例子或一些提示,我将不胜感激!

嗯,设计可以说是有缺陷的.线程实现了遗传编程或GP,一种学习算法.每个线程分析高级趋势进行预测.如果线程完成,则学习将丢失.也就是说,我希望sleep()允许我分享一些资源,而一个线程不是"学习"

所以实际要求是

如何安排维护状态并每2分钟运行一次的任务,但是控制一次执行多少次.

java multithreading executorservice threadpool

8
推荐指数
2
解决办法
4717
查看次数

c ++ custom UI ToolKit - 跨平台抽象层的选项

作为跨平台文本编辑器Sublime Text 2的粉丝,我一直在研究它是如何开发的.开发人员已经注意到它有一些99%的c ++与一些GTK for linux并且它使用他称之为"Sublime GUI"的自定义UI工具包.这是dev的引用

Sublime Text 2本身使用自定义UI工具包.有很多应用程序可能没有意义,但对于Sublime Text来说,这不是一个不合理的选择,我总是知道很多UI控件都必须是自定义的,无论工具包如何(例如,文本控件和选项卡控件).UI工具包位于跨平台抽象层之上,它更像是平台功能的联合而不是最低的共同标准.

我的问题是,跨平台抽象层有哪些选择?我认为这比GTK,QT,SDL低.我试图弄清楚如何创建一个跨平台的自定义UI工具包,只需要编写一次代码.

我很欣赏UI工具包的好处,但是如果我想弄清楚并且在Windows,Linux,Mac上支持我的应用程序,我不知道从哪里开始.

c++ user-interface qt sublimetext2

8
推荐指数
1
解决办法
2074
查看次数

应该使用什么设计模式进行全局配置

我一直在读,在一个从未实例化的类中使用静态变量是一个坏主意,因为当类不再存在于内存中时,变量可能会变为null.说得通.

这就是我一直在做的一个例子

public class MasterParameters {

public static boolean           DEBUG_MODE =                true;
protected MasterParameters(){
    // Exists only to defeat instantiation.
}
Run Code Online (Sandbox Code Playgroud)

}

我也听说使用Singleton同样糟糕,人们建议使用"依赖注入" - 但这对于我需要的东西来说似乎很复杂和过度.我只是不看正确的例子吗?

我想要一个简单的方法在一个位置定义一个变量,可以从我的代码中的任何地方访问,而不必传递参数对象.你有什么建议?谢谢 :)

java configuration design-patterns global-variables

5
推荐指数
1
解决办法
2489
查看次数

用于线程队列的设计模式

我有一个非常复杂的系统(100多个线程)需要发送电子邮件而不会阻塞.我对这个问题的解决方案是实现一个名为的类EmailQueueSender,它在执行开始时启动,并且ScheduledExecutorService每隔500毫秒查看一个内部队列,如果size()> 0则清空它.

在这种情况下,有一个同步的静态方法addEmailToQueue(String[]),它接受一个包含body的主题,subject..etc作为一个数组.系统确实有效,我的其他线程可以继续将他们的电子邮件添加到队列中而不会阻塞,甚至担心电子邮件是否成功发送...它似乎有点乱......或者说是hackish ...每个程序员当他们知道自己做错了什么或者有更好的方法时,会在胃里感受到这种感觉.也就是说,有人可以打我的手腕,并提出一个更有效的方法来实现这一目标吗?

谢谢!

java queue multithreading

3
推荐指数
1
解决办法
2959
查看次数

黑莓推送通知:真的需要TomCat/MySQL吗?

似乎没有关于黑莓推送技术的大量信息.我唯一希望实现的是在黑莓设备可用时向黑莓设备发送通知.我真的需要TomCat和MySQL吗?我的java程序不是servlet,对于我使用PHP并通过套接字与java通信的东西.

我正在使用java,如果有人知道一些例子,那就太好了.

java blackberry push blackberry-push

3
推荐指数
1
解决办法
2607
查看次数

GZipInputStream .read()将零插入缓冲区

我有一个奇怪的程序,GzipInputStream零填充缓冲区的一部分.我有幸知道流中的字节应该是什么样的,我可以看到缓冲区正在填充8个正确的字节和12个零(不应该为零)

BYTES应该看起来像这样----> 0 20 82 22 -91 27 -96 65 66 65 88 32 32 32 32 81 32 0 0 0 100 78

BYTES实际上看起来像这样---> 0 20 82 22 -91 27 -96 65 66 65 0 0 0 0 0 0 0 0 0 0 0 0

前两个字节表示一个整数,用于确定前两个字节之后的可变长度(以字节为单位)的大小.所以在这个例子中,第一个字节是0 20,而在BIG_ENDIAN中,这给我们后续的有效载荷大小为20个字节.

这是我的阅读代码

gzipInputStream = new GZIPInputStream(url.openStream());        

byte[] payload = new byte[2];
gzipInputStream.read(payload);
for(int i=0;i<payload.length;i++){
    System.out.println(payload[i]);
}
int payloadSize = ((payload[0] & 0xFF) << 8) | ((payload[1]) & 0xFF);
//read the next payloadSize …
Run Code Online (Sandbox Code Playgroud)

java binary inputstream gzipinputstream

1
推荐指数
1
解决办法
591
查看次数