|
|
干练的水桶 · 让lua脚本等待/暂停/睡眠/阻塞几秒钟的最 ...· 3 月前 · |
|
|
一身肌肉的荒野 · 解决:Unable to open ...· 1 月前 · |
|
|
爱笑的汉堡包 · 域套接字sendto errno ...· 3 周前 · |
|
|
想表白的茶壶 · Spring ...· 3 周前 · |
|
|
乐观的西瓜 · GitHub Copilot ...· 3 年前 · |
|
|
爱搭讪的桔子 · gnuplot画图一_雅冰石的博客-CSDN博客· 3 年前 · |
我需要使用perl编写一个套接字服务器,它将在64位linux (2.6x内核)上运行。Linux上是否有支持IO完成端口和类似端口的库?
我需要监听多个端口。8000-8100做这件事有没有聪明的方法?
协议必须使用长度字节。
你推荐哪种线程库?我已经使用基于协作多任务的线程调度器在Windows上编写了类似的代码。我的意思是,我希望避免为每个套接字创建一个线程来处理超过10.000个并发连接。
提前谢谢。
发布于 2010-07-13 19:19:25
Perl中的线程通常是不被推荐的。
相反,为了获得高性能,您应该考虑使用
non blocking
或
event driven programming
。
使用常规套接字,您的进程会阻塞每个IO操作,即从未准备好的套接字读取将使您的进程进入休眠状态,直到数据可用。使用非阻塞/事件驱动,您可以轮询套接字,并在套接字准备好读取或写入套接字时获得回调,因此单个进程可以在多个套接字上进行多路复用,从而提供良好的可扩展性能,因为您不需要派生新的进程来处理更多的客户端。
在Perl中有许多很好的基于事件的框架,例如 POE 和 AnyEvent POE是一个具有许多模块和功能的特定事件循环,而AnyEvent是一个抽象层,它允许您在同一代码中使用多个事件循环。
您还应该研究一下 libev ,它类似于POE,但开销要少得多。
编写事件驱动的代码一开始有点棘手,因为你需要小心处理你的阻塞代码,例如cpu密集型操作,或者使用非阻塞的库。因为你只有一个进程,如果它忙于做一些事情,它就不能做任何其他的事情--比如对套接字进行轮询和发出回调。
因此,如果你需要非阻塞和密集的计算,一种方法是创建工作分支,并使用非阻塞管道在它们和事件循环之间通信,这对于上面的库来说非常简单。
https://stackoverflow.com/questions/3235017
复制相似问题
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
|
|
一身肌肉的荒野 · 解决:Unable to open debugger port (127.0.0.1:55017): java.net.SocketException "Socket closed"开发者社区 1 月前 |
|
|
爱搭讪的桔子 · gnuplot画图一_雅冰石的博客-CSDN博客 3 年前 |