首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于单个TCP套接字发送请求和等待响应的多线程FIFO队列

用于单个TCP套接字发送请求和等待响应的多线程FIFO队列
EN

Stack Overflow用户
提问于 2012-09-06 22:39:49
回答 2查看 2K关注 0票数 0

下面是我当前的java实现:

  1. 使用线程从UDP套接字接收UDP包,将数据包放入非阻塞队列。
  2. 300个线程之一读取此非阻塞队列,并将此数据包作为对连接到TCP主机/端口的套接字的请求处理。
  3. 等待响应并将其返回到UDP套接字。

这部分工作正常,但是通过对TCP套接字部分在高负载下的分析,我发现在随机情况下,TCP套接字部分可能需要大约2-5秒的时间才能完成。这部分通常需要2-3毫秒。我的请求是,我只是点击TCP套接字的随机线程执行,我没有FIFO的线程操作。

是否可以将“请求”信息加上当前线程引用(我猜知道要处理‘响应’的线程)放入FIFO阻塞队列,以确保先处理最老的线程,以确保TCP套接字请求/响应操作占用最少的时间。

EN

回答 2

Stack Overflow用户

发布于 2012-09-06 22:43:03

是否可以将“请求”信息加上当前线程引用

我将有一个AtomicLong请求计数器,它将对每个请求进行递增。然后,计数器将与请求映射中的UDP套接字与任何其他每个请求信息相关联。计数器也将通过TCP套接字发送。来自TCP套接字的响应将随请求计数器返回,读取器线程将通过适当的UDP套接字发送回响应,或者将其安排在线程池中。

一旦您有了请求计数器,那么TCP套接字将是一个请求/响应流,以便在必要时可以按顺序发送它们。一个线程将向远程服务器发送请求,另一个线程将读取响应并将响应调度回UDP客户端。你可以保证FIFO的秩序,如果必要,但如果另一个反应准备好了,我不明白为什么它必须等待仅仅因为它是不正常的。

在服务器端,您将有一个类似的读取器和写入线程,它们都是从工作队列中消耗的。

票数 0
EN

Stack Overflow用户

发布于 2012-09-06 22:48:59

我相信你想找一个ConcurrentLinkedQueue --这是我的描述,重点是我。

基于链接节点的无界线程安全队列.这个队列命令元素FIFO (先进先出).队列的head队列上的那个元素,时间最长的。队列的是队列上的那个元素,时间最短的。在队列的尾部插入新的元素,队列检索操作在队列的开头获取元素。当ConcurrentLinkedQueue多个线程共享对一个公共集合的访问时,是一个合适的选择。这个队列做不允许空元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12309459

复制
相关文章

相似问题

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