进程、线程、socket套接字-资源大小 & 切换代价
另,进程 & 线程的很多知识可以看这里:http://www.cnblogs.com/charlesblc/p/6135666.html
今天查了一下进程和线程的资源占用。
比如问:栈和堆的大小?
答:栈是线程的概念,堆是进程的概念。
线程栈的大小,通过 ulimit -s 来设定。Linux默认是10240,也就是10M,Windows默认是1M.
堆的大小,一般最大是 虚拟空间大小 - 1G内核空间大小 - 全局空间等部分,还跟寻址有关。
进程的大小,比线程,还多出了一个PCB(描述进程基本情况和运行状态),另外程序段,也是放在进程里的,线程保存的程序计数器、一组寄存器,和栈。
socket套接字其实都是打开的文件句柄,只要文件句柄够用,socket套接字就够用。
虽然端口port只有65535,并且1024以下的还被保留了;但是socket是四元组,本地同一个端口可以对应远端多个IP和多个端口。
所以理论上这个四元组可以很多很多,网上有人说是 2的48次方。
更多的可以看《程序员的自我修养》。虽然我也不知道相关内容有没有。
切换代价
进程和线程的切换代价,一直是对比的重点。下面罗列一下:
进程间切换的步骤:
1,保存程序计数其以及其他寄存器。
2, 更新当前处于“运行态”的进程的进程控制块,把进程状态改为相应状态,更新其他相关域
3, 把被切换进程的进程控制块移到相关状态的队列
4, 选择另外一个进程开始执行,把该进程进程控制块的状态改为“运行态”
5, 恢复被选择进程的处理器在最近一次被切换出运行态时的上下文,比如载入程序计数器以及其他处理器的值。
进程间切换伴随着两次模式切换(用户--内核,内核--用户)。
(同一进程内)线程间切换的步骤:
线程分两种,用户级线程和内核级线程
在用户级线程中,
有关线程管理的所有工作都由应用程序完成,内核没有意识到线程的存在。
用户级线程间切换时,只需要保存用户寄存器的内容,程序计数器,栈指针,不需要模式切换。
缺点:
1, 在进程的某个线程执行系统调用时,不仅该线程被阻塞,该线程所在进程的所有线程都被阻塞
2, 无法利用多处理器
在内核级线程中,
有关线程的管理工作都是由内核完成的,应用程序部分没有线程管理的权限,只有一个接口(API)
内核级线程间切换时,除了保存上下文,还要进行模式切换。(看起来跟进程切换差不多,但不需要切换内存,缓存等,下面有详细描述)
优点:
1, 可以利用多处理器
2, 线程阻塞不会导致进程阻塞
这一篇,讲的更具体一些:http://blog.csdn.net/mba16c35/article/details/43382737
进程切换分两步
1.切换页目录以使用新的地址空间
2.切换内核栈和硬件上下文。
对于linux来说,线程和进程的最大区别就在于地址空间。
对于线程切换,第1步是不需要做的,第2是进程和线程切换都要做的(但是仍然有不同,见下)。所以明显是进程切换代价大。
线程上下文切换和进程上下文切换一个最主要的区别是线程的切换虚拟内存空间依然是相同的,但是进程切换是不同的。这两种上下文切换的处理都是通过操作系统内核来完成的。内核的这种切换过程伴随的最显著的性能损耗是将寄存器中的内容切换出。
另外一个隐藏的损耗是上下文的切换会扰乱处理器的缓存机制。简单的说,一旦去切换上下文,处理器中所有已经缓存的内存地址一瞬间都作废了。还有一个显著的区别是当你改变虚拟内存空间的时候,处理器的页表缓冲(processor’s Translation Lookaside Buffer (TLB))或者相当的神马东西会被全部刷新,这将导致内存的访问在一段时间内相当的低效。但是在线程的切换中,不会出现这个问题。
进程、线程、socket套接字-资源大小 & 切换代价的更多相关文章
- socket套接字补充、操作系统发展史、进程
目录 socket套接字之UDP协议 操作系统的发展史 手工操作 批处理系统 联机批处理系统 脱机批处理系统 多道技术 进程理论 并发与并行 同步与异步 阻塞与非阻塞 同步异步与阻塞非阻塞总结 soc ...
- 网络编程初识和socket套接字
网络的产生 不同机器上的程序要通信,才产生了网络:凡是涉及到倆个程序之间通讯的都需要用到网络 软件开发架构 软件开发架构的类型:应用类.web类 应用类:qq.微信.网盘.优酷这一类是属于需要安装的桌 ...
- Python之异常处理和socket套接字连接7
一.异常处理 1)异常处理的使用意义 什么是异常处理 异常是程序发生错误的信号,即程序一旦出错就会立刻产生一个异常,如果该异常没有被处理 那么异常就抛出来,程序的运行也随之终止 异常分为三部分: 异常 ...
- 19 网络编程--Socket 套接字方法
1.Socket(也称套接字)介绍 socket这个东东干的事情,就是帮你把tcp/ip协议层的各种数据封装啦.数据发送.接收等通过代码已经给你封装好了 ,你只需要调用几行代码,就可以给别的机器发消息 ...
- 19、网络编程 (Socket套接字编程)
网络模型 *A:网络模型 TCP/IP协议中的四层分别是应用层.传输层.网络层和链路层,每层分别负责不同的通信功能,接下来针对这四层进行详细地讲解. 链路层:链路层是用于定义物理传输通道,通常是对某些 ...
- 网络编程--Socket(套接字)
网络编程 网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中 有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后 如何可靠高效的进行数据传输.在 ...
- 31_网络编程(Socket套接字编程)_讲义
今日内容介绍 1.网络三要素及传输协议 2.实现UDP协议的发送端和接收端 3.实现TCP协议的客户端和服务器 4.TCP上传文件案例 01网络模型 *A:网络模型 TCP/IP协议中的四层分别是应用 ...
- 网络编程之socket套接字
目录 socket套接字简介 socket模块 通信循环 代码优化 连接循环 半连接池 黏包问题 解决黏包问题 黏包问题特殊情况(文件过大) socket套接字简介 由于操作OSI七层是所有C/S架构 ...
- 网络编程与socket套接字
网络编程与socket套接字 传输层 PORT协议 port是一种接口,数据通过它在计算机和其他设备(比如打印机,鼠标,键盘或监视器)之间,网络之间和其他直接连接的计算机之间传递 TCP协议 传输 ...
随机推荐
- WP8.1 windows phone 8.1 二次退出
public MainPage() { HardwareButtons.BackPressed += HardwareButtons_BackPressed; //注册后退键 } private vo ...
- 《奥威Power-BI智能分析报表制作方法》精彩回顾
年的最后一个月,一年又快过去.工作和学习都不能耽误,本周三奥威公开课又如约与大家见面咯!不知老师教的图文报表在课后你们都有练习吗?趁热打铁,我们现在再次来温习一下吧. 本期分享的内容:<奥威Po ...
- 字节流和字符流(InputStream类和OutputStream类)
java流包括字节流和字符流,字节流通过I/O设备以字节数据的方式读入,而字符流则是通过字节流读入数据转换成字符"流"的形式由用户驱使. InputStream是所有字节输入流的父 ...
- Mybatis Oracle 更新时报错17090
更新数据库时报错 查看数据库里的数据是已经更新了 . 我开始用的是注解@Update("......")调试了好久都找不到原因,因为单独执行更新语句是正确的,在项目里运行,数 ...
- oracle生成主键
SELECT 'ZTO'||TO_CHAR(SYSDATE,'yymmdd')||TO_CHAR(SEQ_COMMON_ORDER.NEXTVAL,'FM00000000') AS orderCode ...
- MYSQL里使用正则的速度快还是使用like模糊查询语句快?
LIKE 会略快一些.但显然LIKE的功能无法与REGEXP相比. 另外是索引的问题,LIKE有可能使用索引但REGEXP则很难.
- paper 106:图像增强方面的介绍
图像增强是从像素到像素的操作,是以预定的方式改变图像的灰度直方图.有时又称为对比度增强,灰度变换.点运算不可能改变图像内的空间关系,输出像素的灰度值由输入像素的值决定.其作用: 对比度增强:扩展感兴趣 ...
- [firefox]在Debian7及其衍生版下安装firefox
Easy way to install Firefox browser on Debian 7 wheezy Debian by default comes with Iceweasel web br ...
- jquery判断起止时间大小和非空
//时间判断 function CheckDate() { var startTime = $('#txtTime').val(); //获取当前日期 var start = new Date(sta ...
- SQL2008根据日志恢复
--创建测试数据库 CREATE DATABASE Db GO --对数据库进行备份 BACKUP DATABASE Db TO DISK='c:\db.bak' WITH FORMAT GO --创 ...