温文尔雅的绿豆 · 我院学子在2023iCAN大学生创新创业大赛 ...· 2 月前 · |
爱跑步的山寨机 · 江苏灌云干部财产公示内容被删除 否认因压力大 ...· 2 月前 · |
火星上的油条 · 南洋理工大学的制造系统MSC(今年变成智能制 ...· 1 年前 · |
闯红灯的爆米花 · 《夺冠》百度云盘阿里下载[MP4/mkv]蓝 ...· 1 年前 · |
绅士的勺子 · 《琅琊榜》中,梅长苏结局究竟死了没有? - 知乎· 1 年前 · |
我需要使用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
绅士的勺子 · 《琅琊榜》中,梅长苏结局究竟死了没有? - 知乎 1 年前 |