概述c linuxmultithreading联网
我在网关上有一个networking应用程序。 它接收和发送数据包。 对于其中大多数,我的网关作为一个路由器,但在某些情况下,它也可以接收数据包。
我应该有:
只有一个主线程
一个主线程+一个调度线程负责将其提供给正确的stream程处理程序
与stream量一样多的线程
别的东西。
?
等待networkingconfiguration在windows服务启动完成
如何在内核模块中将networking接口设置为混杂模式?
从套接字读取失败:连接重置由peer
DNS查询function,区分不存在的主机和networking错误
当我有足够的端口时为什么\’没有可用的缓冲空间\’错误?
在Ubuntu上访问smbfs的cfdirectory奇怪的问题
在linux上使用Java 6,我该如何确保使用一个ipv4套接字?
Oracle XE不绑定在IP4端口1521上
获取每个连接的带宽统计
IPv6链接本地地址格式
正确地执行多线程并不是一件简单的事情,在许多情况下,基于选择和基于朋友的解决方案将更容易创建。
你的情况听起来很像一个典型的Unix服务守护进程。 您的问题的流行解决方案不是使用线程,而是分叉。
这个想法是你的程序监听套接字并等待连接。 一旦连接到达,它叉。 子进程然后继续处理连接。 父进程本身只是在循环中继续,并等待传入的连接。
线程优势:
非常简单的程序设计
没有并发问题
建立Unix / linux系统的方法
缺点:
当几个连接互相影响时,情况会变得复杂(你的用例听起来不像)
在windows系统上的性能损失(不在Unix系统上!)
你可以在网上找到很多代码示例。
我对网络应用程序不太了解,但是我认为它是这样的:
如果你有能力反应异步的请求,你可能会使用一个单一的线程(如Node.Js)。 如果你不能反应异步主线程总是会阻止其他行动。
如果你不能对你的请求反应异步,你必须使用多个线程。 但是,您可以通过许多不同的方式实现这一点:您可以为每个请求创建一个线程或有限数量的线程,然后将其分配给您的请求。
我个人偏好是每个连接使用一个主线程和一个工作线程。 没有任何帽子。 我假设你的服务器像http服务器一样是无状态的。
对于有状态的服务器,你将不得不找出一些方法来控制线程的数量。
总结
以上是内存溢出为你收集整理的c linuxmultithreading联网全部内容,希望文章能够帮你解决c linuxmultithreading联网所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
请登录后查看评论内容