套接字发送(.)线程的最佳数量
Optimal number of socket send(..) threads
如果我有 N 个套接字的数组,并且我需要以尽可能高的速度向每个套接字发送 (..( 数据,那么执行此操作的最佳线程数是多少?操作系统是 linux。
例如,如果我有 C 物理内核,应该是 C 线程中的每一个执行 send(..(?会高效吗?换句话说,我的问题 linux 内核如何处理 send(..( 系统调用以及如何在内核中调度提供给它的数据。我记得从 BSD 套接字文档中读到,实际上所有套接字的 send(..( 系统调用都将数据放入由一个线程处理的队列中,因此代码:
thread1 -> send(sock1, ..)
..
threadN -> send(sockN, ..)
或多或少等同于(减去在发送到内核之前通过发送处理数据的时间(由网络性能与代码
thread -> send(sock1, ..), ..., send(sockN, ..)
但那是来自 1990 年中期的书,我认为现代操作系统应该在那之后发生变化。
如果你所有的线程都应该做完全相同的事情,我会说最好的办法是用迭代器在单个线程中做这件事。
您可以做的是定义一个链表来保存节点,该节点将保存每个套接字的文件描述符。在每个小时结束时,循环访问列表并发送包。 您可以在类中定义数据发送函数,以便减少主函数中的工作量。
我相信这比维护 100 个处于睡眠状态的线程要好。
还要确保使用睡眠功能而不是任何类型的毫秒检查。这肯定会降低代码的 CPU 使用率,同时保持性能不变。
相关文章:
- 将线程中的数据存储到全局容器的最佳方法?
- 最佳做法是从另一个线程访问 qml 中的Q_PROPERTY
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- std::使用类成员函数创建线程 - 最佳实践
- 等待线程的最佳方式是什么
- 存储/传递 v8 承诺解析器供以后使用的最佳实践?(结合C++线程)
- 套接字发送(.)线程的最佳数量
- 线程数据封装最佳实践
- 最佳多线程全局变量管理
- 从QTcpSocket上的数据流中连续运行复杂算法的最佳Qt线程解决方案是什么
- 多线程 UI 的最佳方式
- 暂停和恢复线程的最佳解决方案是什么?
- 使用来自不同线程的实时数据更新QTableView的最佳策略
- 从线程更新进度条的最佳方式
- C++/Win32 我在 Windows 2000+ 上启动线程的最佳方式
- 控制对多线程程序中字符串对象的访问的最佳方法
- std::线程管理:用法和最佳实践
- 在多个相互依赖的线程上进行封送处理和等待的算法、模式或最佳实践
- CUDA扭曲和每个块的最佳线程数
- 处理字符串的最佳线程数