热门标签 | 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.

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


推荐阅读
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 本文介绍了Codeforces Round #321 (Div. 2)比赛中的问题Kefa and Dishes,通过状压和spfa算法解决了这个问题。给定一个有向图,求在不超过m步的情况下,能获得的最大权值和。点不能重复走。文章详细介绍了问题的题意、解题思路和代码实现。 ... [详细]
  • 本文介绍了一道经典的状态压缩题目——关灯问题2,并提供了解决该问题的算法思路。通过使用二进制表示灯的状态,并枚举所有可能的状态,可以求解出最少按按钮的次数,从而将所有灯关掉。本文还对状压和位运算进行了解释,并指出了该方法的适用性和局限性。 ... [详细]
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社区 版权所有