社区
Java SE
帖子详情
java 阻塞式socket+多任务处理
fnststart
2013-12-03 11:26:03
小菜最近碰到一个问题,
采用多线程socket通信模式,有多个客户机可能发送处理请求。
server端的serversocket每接受一个任务请求,就往任务队列添加一个任务,然后返回任务状态给客户端。
这时候有另外一个任务处理线程,只要任务队列不为空就取一个出来处理。
整个流程就是这样,应该采用什么方式来设计。
我把任务处理线程也设计成阻塞式线程了,结果就是只有一个线程能执行。。
...全文
249
5
打赏
收藏
java 阻塞式socket+多任务处理
小菜最近碰到一个问题, 采用多线程socket通信模式,有多个客户机可能发送处理请求。 server端的serversocket每接受一个任务请求,就往任务队列添加一个任务,然后返回任务状态给客户端。 这时候有另外一个任务处理线程,只要任务队列不为空就取一个出来处理。 整个流程就是这样,应该采用什么方式来设计。 我把任务处理线程也设计成阻塞式线程了,结果就是只有一个线程能执行。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
MiceRice
2013-12-04
打赏
举报
回复
引用 楼主 fnststart 的回复:
我把任务处理线程也设计成阻塞式线程了,结果就是只有一个线程能执行。
总体思路没啥问题。楼主会用线程池么? 起步:监听专门用一个线程,也可以理解为分发线程;监听到新的连接请求后,就将这个Socket作为一个任务扔给线程池。 进阶:同时注意线程池的任务数量是否太多,如果太多了要不要适量增加线程池的线程数;如果更多的情况下,是否要拒绝连接请求以保证服务器端压力不要太大;还有是否要注意闲置连接(连接建立后啥事不干);还有是否要注意长时间忙碌连接(可能死循环了之类的)。
爱跳舞的铅笔头
2013-12-04
打赏
举报
回复
首先说一下,楼主前面的设计是没有问题的,但是任务处理线程处理完一个任务,要把这个任务从任务队列里清楚,然后下一次再从队列里取出第一个任务继续处理,这样没有问题。 然后可以提一个建议,楼主可以楼主可以多创建几个处理任务的线程,同时处理任务,这样就设计线程同步问题的处理,楼主需要使用线程锁来解决线程同步问题,相关问题,可以到网上搜一下,这方面的例子有很多。
fnststart
2013-12-03
打赏
举报
回复
哈哈,对于两个阻塞式线程,只能用sleep让两个线程同时工作了。 你说的NIO一部方式还不是很了解,有时间好好了解下
suciver
2013-12-03
打赏
举报
回复
看你客户socket的数量了,同步方式理解和代码写起来要简单,但是占用大量的系统资源,客户不多的时候可以用同步方式,如果客户达到几千上万的用NIO的异步方式。
其实我是真性情
2013-12-03
打赏
举报
回复
应该用生产者消费者模式来设计吧,具体实现几句话说不清楚,楼主自己摸索吧,任务处理线程这地方有点问题,任务处理线程是阻塞的没问题,因为不过它应该是用来调度的而不是由他来处理,就是只要任务队列不为空就取一个出来
处理
。这里不是取出来就处理,这样当然就编程单线程了,应该是只要任务队列不为空就取一个出来然后
开一个处理线程进行处理
。你的任务线程是阻塞的,但是处理线程是多线程就可以了。
java
socket
编程例子_百度架构大牛的
Java
TCP/IP
Socket
编程开发经验分享,真香
本文介绍了《
Java
TCP_IP
Socket
编程》,基于TCP/IP套接字原理,深入浅出介绍
Java
套接字编程。书中有大量示例程序和章末练习,适合作为教程。还涵盖计算机网络概念、客户端与服务器结构、消息创建解析等内容,涉及高级技术和底层协议细节。
百度10年架构师分享的(
Java
TCP/IP
Socket
编程开发经验)看完受益匪浅!
本书详细介绍了如何使用
Java
进行TCP/IP套接字编程,内容涵盖TCP/IP基础知识、套接字地址、消息创建与解析、
多任务处理
、高级网络编程技术以及NIO的应用。书中通过实例代码帮助读者理解和掌握套接字编程,适合
Java
网络编程初学者和进阶者。
✨【
Socket
网络编程性能篇】(四) 高并发大挑战!NIO、epoll/kqueue 如何让你的服务器“飞”起来?
文章指出传统‘一个连接一个线程’的
Socket
模型在高并发场景下存在性能瓶颈,如线程创建与销毁开销大、上下文切换成本高、内存消耗大等。为解决这些问题,介绍了I/O多路复用技术,包括select、poll、epoll、kqueue,以及
Java
NIO中的实现,还给出了
Java
NIO Selector的简单示例。
java
的nio与io对比
本文对比
Java
NIO与IO包的区别,详细阐述了NIO的高性能特性、缓冲、通道等概念,以及与传统IO的区别,如非
阻塞
模
式
、文件I/O和
socket
操作的改进。
对比
Java
.nio 和
Java
.io
本文对比了
Java
的NIO与IO包,详细阐述了它们的区别、各自特性和使用场景。重点介绍了NIO的非
阻塞
模
式
、缓冲、通道等特性,以及与传统IO库的区别,如在文件和
socket
操作上的表现。通过实例解释了NIO如何提高I/O性能,并提供了
Java
.nio包的概览。
Java SE
62,621
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章