热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux套接字和多线程的C。-linuxsocketsandmultithreadinginC

Iwanttocreateaprocessrunningunderlinuxthatcreatesmultiplethreads,eachthreadwritingth

I want to create a process running under linux that creates multiple threads, each thread writing their own data out to a receiving process over a UDP socket connection. For sizing, say I need to have up to one hundred of these threads all running simultaneously with threads coming and going.

我想创建一个在linux下运行的进程,该进程创建多个线程,每个线程通过UDP套接字连接将自己的数据写入一个接收进程。对于大小调整,假设我需要有多达100个这样的线程同时运行,同时有线程来来去去。

Is it better to have each thread open up it's own socket to the same destination using the same UDP port number when the thread is created (thus needing 100 separate file descriptors) or to open the socket one time in the main thread and pass that file descriptor to each of the threads so it each uses the same socket? Each thread will be generating about 20 packets per second, each packet roughly 800 bytes in length. There is no synchronization between threads.

最好是每个线程打开它自己的套接字到相同的目的地使用相同的UDP端口号创建线程时(因此需要100个独立的文件描述符)或一次打开套接字在主线程和文件描述符传递给每一个线程,所以每个使用相同的套接字?每个线程将每秒生成大约20个数据包,每个数据包大约800字节。线程之间没有同步。

4 个解决方案

#1


1  

I don't think there would be a speed benefit with using multiple sockets unless possibly on a multihomed machine. The physical network layer cannot simultaneously send two packets at once. I would be a little concerned, though, about using a single socket without synchronization. I think it is supposed to be thread-safe, but some googling seems to indicate potential problems. I would probably put a sync around it if I were coding it because the underlying placement of the packet on the wire is going to ultimately be serialized.

我不认为使用多个套接字会带来速度上的好处,除非是在多主机上。物理网络层不能同时发送两个数据包。不过,我有点担心使用单个套接字而不进行同步。我认为它应该是线程安全的,但一些谷歌搜索似乎表明存在潜在的问题。如果我编码的话,我可能会在它周围放一个同步,因为包在电线上的底层位置最终会被序列化。

#2


0  

Individual socket writes are synchronized for you (at the socket level), and assuming you don't have any grouping or relative ordering dependencies, this will work fine.

每个套接字写都为您同步(在套接字级别),并且假设您没有任何分组或相对排序依赖项,这将会很好地工作。

#3


0  

I would go for a loose-coupling approach - have all threads independent. The load doesn't seem excessive so loose-coupling appears appropriate.

我将采用松耦合的方法——让所有线程独立。负载看起来并不过分,所以松耦合看起来是合适的。

Of course, some folks will disagree but from a systems point-of-view, loose-coupling is always preferable ... where applicable :-)

当然,有些人会不同意,但是从系统的角度来看,松耦合总是更好的。适用:-)

#4


0  

your solution work properly because you don't have same data to share between threads. But I think you can use connection pool ( make some connection and borrow to threads ) and threads in queue wait for give connection from pool.if the number of connection and thread are big performance lose[network restriction and your machine restriction] other solution that queue all thing is don't use pooling and queue all thing.but I think pooling give better performance.

您的解决方案可以正常工作,因为您没有相同的数据可以在线程之间共享。但是我认为您可以使用连接池(建立一些连接并借用到线程)和队列中的线程等待来自池的给定连接。如果连接和线程的数量很大,性能就会下降[网络限制和您的机器限制]。但我认为联营能带来更好的表现。


推荐阅读
  • 本文介绍如何使用OpenCV和线性支持向量机(SVM)模型来开发一个简单的人脸识别系统,特别关注在只有一个用户数据集时的处理方法。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • Python全局解释器锁(GIL)机制详解
    在Python中,线程是操作系统级别的原生线程。为了确保多线程环境下的内存安全,Python虚拟机引入了全局解释器锁(Global Interpreter Lock,简称GIL)。GIL是一种互斥锁,用于保护对解释器状态的访问,防止多个线程同时执行字节码。尽管GIL有助于简化内存管理,但它也限制了多核处理器上多线程程序的并行性能。本文将深入探讨GIL的工作原理及其对Python多线程编程的影响。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • Vue CLI 初始化 Webpack 项目时,main.js 文件是如何被调用的? ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • Vue应用预渲染技术详解与实践 ... [详细]
author-avatar
再见傻瓜傻瓜_299
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有