文档章节

漫谈进程与线程

青灯夜
 青灯夜
发布于 2015/09/01 22:10
字数 770
阅读 28
收藏 1

       进程是由两个部分构成的,一个是进程内核对象,另一个是地址空间。每个进程至少需要一个线程,同样,
线程也是由两个部分组成的:
  • 一个是线程的内核对象,操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息的地方。
  • 另一个是线程堆栈,它用于维护线程在执行代码时需要的所有函数参数和局部变量。
       进程是不活跃的。进程从来不执行任何东西,这一点很关键,也就是进程不干活,只是个工头,是线程的容器。线程总是在某个进程环境中创建的,而且寿命期在进程内。线程在它的进程地址空间中运行,并对数据进行操作。在单进程环境中,多个线程之间可以并发执行,这两个线程将共享单个地址空间。这些线程能够执行相同的代码,对相同的数据进行操作。这些线程还能共享内核对象句柄,因为句柄表依赖于每个进程存在而不是每个线程。

       进程使用的系统资源比线程多得多,因为进程需要更多的地址空间。为进程创建一个虚拟地址空间需要许多系统资源。系统中要保留大量的记录,这要占用大量的内存。另外,由于.exe和.dll文件要加载到一个地址空间,因此也需要文件资源。而线程使用的系统资源要少得多。实际上,线程只有一个内核对象和一个堆栈,保留的记录很少,因此需要很少的内存。

总结一下:
  • 一个进程至少有一个线程,线程的划分尺度小于进程,使得多线程程序的并发性高。
  • 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
  • 线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
  • 多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统不会将多个线程看做多个独立的应用。
  • 大多数情况下,线程需要的开销比进程少,因此尽量应该设法用增加线程来解决编程问题,而要避免创建新的进程。但是,这个建议并不是一成不变的。许多程序设计用多个进程来实现会更好些。应该懂得权衡利弊,经验会指导你的编程实践。

版权声明:本文为csdn博主[applebite](http://blog.csdn.net/applebite) 原创文章,转载请注明出处,侵权必究。 微信添加公众号:qi_chuang 或 猎奇创新平台

© 著作权归作者所有

青灯夜
粉丝 2
博文 35
码字总数 21708
作品 0
朝阳
程序员
私信 提问
高性能服务器开发 2018 年原创汇总

版权声明:欢迎关注我的微信公众号:「easyserverdev」,中文名:『高性能服务器开发』。 https://blog.csdn.net/analogous_love/article/details/86483266 2018 年就这样过去了,总结一下 ...

analogous_love
01/14
0
0
应用与系统稳定性第三篇---FD泄露问题漫谈

在正式解释什么是fd泄露的时候,先看看三份log,是否有眼熟而不知所措感觉?结合公司同事的深入研究,总结了多种实际案例,才有了这篇文章,以后FD泄露问题在也不慌了。 log 1: Could not r...

LooperJing
2018/11/02
0
0
读《毛德操:关于进程挂靠》

WINDOWS 可以创建远程线程,但是linux却不可以,为何?windows是基于对象的,是异步的,在很多情况下都没有进程上下文,试想一下,windows实际 上就像一个超大容器,里面有形形色色各种对象,...

晨曦之光
2012/04/10
905
0
应用与系统稳定性第五篇---Watchdog原理和问题分析

前面已经这个系列已经更新了4篇,死机重启问题分析中,Watchdog问题最为常见,今天接着写一写Watchdog问题的分析套路以及工作原理。 应用与系统稳定性第一篇---ANR问题分析的一般套路 应用与...

LooperJing
2018/11/06
0
0
漫谈多线程:GCD(一)

导言 多线程是程序开发中非常基础的一个概念,大家在开发过程中应该或多或少用过相关的东西。同时这恰恰又是一个比较棘手的概念,一切跟多线程挂钩的东西都会变得复杂。如果使用过程中对多线...

Chars-D
2016/03/03
84
0

没有更多内容

加载失败,请刷新页面

加载更多

刚哥谈架构 (二) 我眼中的架构师

之前在公司,有小伙伴在向别人介绍我的时候,经常会有人这么说:“刚哥是我们的architcture”,如果来人是老外,心中一定是一惊,心中暗叹,“这位匪首看上去貌不惊人,难道已经做到了架构和...

naughty
34分钟前
2
0
OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
89
3
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
5
0
Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部