Java开发服务器的线程怎么处理?

Java开发服务器的线程怎么处理?,第1张

在进行服务器处理的过程中,需要保证数据的正确处理,那么最重要的就是使用不同的数据处理模式进行运算。在整个过程中,可能很多人对服务器的知识并不了解,那么应该如何进行Java开发服务器的线程处理呢,关于线程处理有哪些知识?下面回龙观北大青鸟为大家介绍关键服务器线程处理的简单知识。

1、BIO线程模型

在JDK14中引入JavaNIO之前,所有基于Java的Socket通信都使用了同步阻塞模式(BIO)。这种请求-响应通信模型简化了上层的应用程序开发上,但在具有性能和可靠性的情况下,存在一个巨大的瓶颈。在一段时间里面,大型应用程序服务器主要是用C或C++开发的,因为它们可以直接使用 *** 作系统提供的异步I/O或AIO功能。

当流量增加且响应时间延迟增加时,JavaBIO开发的服务器软件只能通过硬件的不断扩展来满足并发性和低延迟的情况,这极大地增加了企业的成本和群集大小。系统的不断扩展,系统的可维护性也面临着巨大的挑战,只能通过购买性能更高的硬件服务器来解决问题,这将导致恶性循环的产生。

2、异步非阻塞线程模型

从JDK10到JDK13,Java的I/O类库非常原始。UNIX网络编程中的许多概念或接口未反映在I/O类库中,例如Pipe、Channel、Buffer和Selector等。在发布JDK14的时候,NIO正式发布JDK作为JSR-51。并且它还添加了一个javanio包,为异步I/O开发提供了许多API和库。

3、RPC性能三原则

影响RPC的性能主要有三大元素,其中主要为I/O模型、协议及线程。

I/O模型:使用什么样的通道传递给另一方,BIO,NIO或AIO发送数据,IO模型在很大程度上能够决定框架的性能。

协议:应该使用什么样的通信协议,Rest+JSON或基于TCP的专用二进制协议。参加电脑培训的过程中发现,协议的选择不同,性能模型也不同。内部专用二进制协议的性能通常可以比公共协议更好地设计。

线程:如何读取数据报?在执行读取后的编解码器的哪个线程中,如何分发编码消息,通信线程模型是不同的,并且对性能的影响也非常大。

客户端和服务器正在通信,你突然关掉了客户端,他肯定要出异常的。这个异常需要你自己来处理(而不是让他打印堆栈信息)。
try{
//代码块
//这里一般会用一个while(//连接中){
//判断接收的信息是退出的标志,是则按正常退出
//否则,处理信息
//继续读
}

}catch(Exception e){ //exception的类型最好写具体的子类
Systemoutprintln("客户端连接中断"+socket);
}finally{
//在这里关闭这个客户端的socket
socketclose();
}

linux系统不可能自行中止或者暂停你的线程,我写过很多服务器程序,都是几个月连续运行的,从来没遇到过这种情况,问题肯定出在你线程内部

是否有可能线程挂起?被信号中断?死锁?信号量卡死?

在线程出问题的时候,用gcore把堆栈信息采集下来,然后用gdb跟踪到具体卡住的线程,看下到底卡在哪里。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10627922.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存