
java进程、线程知识扩充
发布日期:2021-05-06 22:11:45
浏览次数:11
分类:技术文章
本文共 908 字,大约阅读时间需要 3 分钟。
进程
1、一个进程至少得有一个线程,我们把这个线程称之为”主线程“
2、一个线程在默认情况下只有一个栈,位置在应用程序的进程地址空间中,而在内核中并没有栈,而是一个叫做线程内核对象的结构体,用来记录该线程的相关参数。
3、默认情况下,一个线程的栈要预留1M的内存空间,一个进程中可用的内存空间只有2G,所以理论上一个进程中最多可以开2048个线程。但是内存当然不可能完全拿来作线程的栈,所以实际数目要比这个值要小。
线程
一、线程概念
多线程的体现:硬盘、CPU、内存(一般操作都需要经过内存,如:复制粘贴)
1、 java的线程开启,默认的虚拟机会分配1M的内存,可以设置
2、Java进程可以启动的线程数可以通过如下公式计算:
(系统剩余内存 - 最大堆容量Xmx - 最大方法区容量MaxPermSize)/ 最大栈空间Xss这样,4G的服务器单个进程可以开多少线程,可以粗略计算出来,大概是5000个线程3、一个http请求,就是一个线程。
二、tomcat中的线程池,默认BIO
tomcat有两种请求方式
- 收到一个请求就处理,这个时候就不能处理新的请求,这种为阻塞
- 收到一个请求就新开一个线程去处理任务,主线程返回,继续处理下一个任务,这种为非阻塞。
- 线程池:但是不是每次收到请求就开一个新的线程,而是使用线程池;由于频繁创建、关闭数据库连接会消耗资源,所以会用数据库连接池来保存一定数量的连接,如果需要就从连接池里取连接,不需要则放回连接池,不在频繁创建。
-
基于Java NIO实现的服务器模型
上面说到的几种模型,都是基于BIO(阻塞IO)。而NIO则是非阻塞IO,它是基于IO多路复用技术(例如Reactor模式)实现,只需要一个线程或者少量线程,就可以处理大量请求。从性能上来说NIO实现的服务器并发性一般大于BIO,所以可以实现高性能的服务器。如果感兴趣,可以学习一些基于NIO的网络编程框架,例如Netty、MINA。最后。Tomcat运行可以选择BIO或者NIO模型,原理分别对应上面的3和4两种方式。Tomcat默认是BIO方式运行,如果想要换成NIO,可以配置server.xml:
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月04日 04时19分40秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
bzoj5017: [Snoi2017]炸弹
2019-03-03
4084: [Sdoi2015]双旋转字符串
2019-03-03
bzoj3439: Kpm的MC密码(四种做法)
2019-03-03
Nginx出现500 Internal Server Error 错误
2019-03-03
flask 404 not found
2019-03-03
pytorch loss = loss_func(output, label) 报错
2019-03-03
51nod 1526 分配笔名
2019-03-03
MySQL中drop、truncate和delete的区别?
2019-03-03
Mysql索引底层B+树的实现原理以及Innodb和Myisam引擎存储的区别
2019-03-03
01-04 计算机基础知识(如何打开DOS控制台、常用DOS命令)
2019-03-03
09-01 Java语言基础(package、import)
2019-03-03
11-01 Java语言基础(Scanner类)
2019-03-03
12-04 Java语言基础(Arrays类)
2019-03-03
MyBatis:6、MyBatis缓存
2019-03-04
Accessing Excel Spreadsheets via C++
2019-03-04
请注意
2019-03-04
excel上传核心
2019-03-04
json.parse细节
2019-03-04