首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C linux多线程网络

问C linux多线程网络
EN

Stack Overflow用户
提问于 2012-06-29 14:46:12
回答 4查看 771关注 0票数 4

我在网关上有一个网络应用程序。它接收和发送数据包。对他们中的大多数人来说,我的网关充当一个路由器,但在某些情况下,它也可以接收数据包。

我是否应该:

  • 只有一个主螺纹
  • 主线程+调度线程,负责将其分配给正确的流处理程序
  • 有多少线程就有多少流
  • 一些其他的东西。
EN

回答 4

Stack Overflow用户

发布于 2012-06-29 14:48:23

正确地执行多线程并不是一件简单的事情,在许多情况下,基于选择和朋友的解决方案很容易创建。

票数 2
EN

Stack Overflow用户

发布于 2012-06-29 14:52:38

您的情况听起来很像一个典型的Unix服务守护进程。解决问题的常用方法不是使用线程,而是使用分叉。

其想法是,您的程序侦听套接字并等待连接。连接一到,就分叉了。然后,子进程继续处理连接。父进程本身只在循环中继续,等待传入的连接。

优于线程:

  • 非常简单的程序设计
  • 并发没有问题
  • Unix/Linux系统的建立方法

Disadvantages:

  • 当几个连接相互交互时,事情变得复杂起来(您的用例听起来不像它们)
  • Windows系统上的性能损失(而不是Unix系统!)

您可以在网上找到许多代码示例。

票数 2
EN

Stack Overflow用户

发布于 2012-06-29 14:50:48

我对网络应用不太了解,但我认为它是这样的:

  • 如果您能够异步响应请求,那么可能只使用一个线程(如Node.JS中的线程)。如果您无法响应异步,主线程将始终阻止其他操作。
  • 如果您无法对请求作出异步反应,则必须使用多个线程。但是您可以通过许多不同的方式实现这一点:您可以为每个请求创建一个线程,或有限数量的线程,然后将它们分配给您的请求。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11263933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档