作为一个侧面项目,我正在为一个我曾经玩过的古老游戏编写服务器.我试图让服务器尽可能松散耦合,但我想知道什么是多线程的好设计决策.目前我有以下一系列行动:
我假设平均有100个客户,因为这是游戏任何给定时间的最大值.对于整个事物的线程,什么是正确的决定?我目前的设置如下:
这将导致总共102个线程.我甚至考虑给客户端2个线程,一个用于发送,一个用于接收.如果我这样做,我可以在接收器线程上使用阻塞I/O,这意味着线程在平均情况下将大部分处于空闲状态.
我主要担心的是,通过使用这么多线程,我将占用资源.我并不担心竞争条件或死锁,因为这是我无论如何都要处理的事情.
我的设计是这样设置的,我可以使用单个线程进行所有客户端通信,无论它是1还是100.我已将通信逻辑与客户端对象本身分开,因此我可以实现它而无需重写很多代码.
主要问题是:在应用程序中使用超过200个线程是错误的吗?它有优势吗?我正在考虑在多核机器上运行它,它会像这样多个核心占用很多优势吗?
谢谢!
在所有这些线程中,大多数线程通常会被阻塞.我不认为连接速度超过每分钟5次.来自客户端的命令很少会出现,我平均说每分钟20个.
按照我得到的答案(上下文切换是我正在考虑的性能打击,但我不知道,直到你指出它,谢谢!)我想我会采用一个听众,一个方法接收者,一个发送者和一些杂项;-)
我有一个配置为匿名访问的MOSS 07站点.此站点中有一个文档库,也启用了匿名访问.当匿名用户单击此库中的PDF文件时,他或她可以正常阅读或下载它.当用户单击Office文档时,系统会提示他或她使用登录框.用户可以在不输入登录的情况下取消此框,并将被带到文档中.
这发生在IE中,但不是FireFox.
我在网上看到一些对此问题的引用,但没有明确的解决方案:http: //www.microsoft.com/communities/newsgroups/en-us/default.aspx?dr = microsoft.public.sharepoint.windowsservices.development&tid = 5452e093 -a0d7-45c5-8ed0-96551e854cec&猫= en_US_CC8402B4-DC5E-652D-7DB2-0119AFB7C906&LANG = EN&CR = US&SLOC = p = 1
http://www.sharepointu.com/forums/t/5779.aspx
http://www.eggheadcafe.com/software/aspnet/30817418/anonymous-users-getting-p.aspx
在clearcase快照视图中工作时,我想使用自己的diff.
据我所知,运行" cleartool diff" 时无法指定diff工具,因此我认为我可以运行像" mydiff <predecessor file> <modified file in my view>" 这样的东西,但我对ClearCase不太了解能够找到"前任"文件"以反对.
有什么办法吗?
忘了提到(直到现在,在阅读了处理windows的前两个响应之后),这是在Unix上,我不允许使用ClearCase配置.
从代码隐藏中关闭ASPX页面的最佳方法是什么?
我有一个按钮事件处理程序,我想在用户单击页面上的ASP.NET按钮后关闭页面.我试图以编程方式添加一个JavaScript方法,其中包含一个window.close()命令到OnClientClick事件关闭页面,但它不起作用.该按钮也asp:AsyncPostBoskTrigger适用于AJAX更新面板.
该应用程序使用.NET Framework 3.5.
如果我有3个不同的视图,它们在3个相应的函数中定义,即:
- (UIView *)getView1 { /*...*/ }
- (UIView *)getView2 { /*...*/ }
- (UIView *)getView3 { /*...*/ }
Run Code Online (Sandbox Code Playgroud)
这些是self.view在需要特定视图时添加的.
我的问题是,我们如何知道目前正在显示哪些观点?是否有参数可以识别哪个视图是当前视图?
我正在将应用程序从PHP迁移到Java,并且在代码中大量使用正则表达式.我在PHP中遇到过似乎没有java等价物的东西:
preg_replace_callback()
Run Code Online (Sandbox Code Playgroud)
对于正则表达式中的每个匹配,它调用一个函数,该函数将匹配文本作为参数传递.作为示例用法:
$articleText = preg_replace_callback("/\[thumb(\d+)\]/",'thumbReplace', $articleText);
# ...
function thumbReplace($matches) {
global $photos;
return "<img src=\"thumbs/" . $photos[$matches[1]] . "\">";
}
Run Code Online (Sandbox Code Playgroud)
在Java中这样做的理想方法是什么?
我正在使用子进程模块启动子进程并连接到它的输出流(stdout).我希望能够在其标准输出上执行非阻塞读取.有没有办法让.readline非阻塞或在我调用之前检查流上是否有数据.readline?我希望这是可移植的,或至少在Windows和Linux下工作.
这是我现在如何做到的(.readline如果没有数据可用,则阻止它):
p = subprocess.Popen('myprogram.exe', stdout = subprocess.PIPE)
output_str = p.stdout.readline()
Run Code Online (Sandbox Code Playgroud) 在运行java类时使用-agentlib:hprof = cpu = times vs -agentlib:hprof = cpu = sample有什么区别?我知道cpu = sample会导致jvm定期对调用堆栈进行采样,但cpu = times会做什么?
我在桌子上有两个字段.一个包含诸如BTA,BEA,REA之类的值.另一个包含1,2,63,103等值.
我想结合2个字段,使它们看起来像BTA001,BTA002,BTA063,BTA103.
请注意,如果数字的长度不是3个字符,我想在数字的左边填充0,使其等于3.
我该怎么做呢?表中的字段称为Type,对应于BTA,BEA和REA,Id是对应于1,2,63和103的字段.
最近关于使用C#随机排序的这个问题让我想到了我有时在Perl中改组数组的方式.
@shuffled = sort { rand() <=> rand() } @array;
Run Code Online (Sandbox Code Playgroud)
在上述问题中提出的解决方案是Fisher-Yates shuffle,它在线性时间内工作.
问题是:我的代码片段效率如何,并且是如此随机"真正"随机?
java ×2
anonymous ×1
asp.net ×1
c# ×1
clearcase ×1
cleartool ×1
cocoa-touch ×1
diff ×1
io ×1
jvm ×1
nonblocking ×1
performance ×1
perl ×1
php ×1
preg-replace ×1
profiling ×1
python ×1
random ×1
regex ×1
security ×1
sharepoint ×1
sorting ×1
sql-server ×1
subprocess ×1
t-sql ×1