深入理解.net多线程(一)

多线程开发要理解的几个基本概念:进程、应用程序域、对象上下文

进程:进程是一个操作系统级别的概念,用来描述一组资源和程序运行所必需的内存分配。简单的理解,可以认为进程就是一个运行程序。对于每一个被加载到内存的*.exe程序,在它的生命周期中,操作系统会为之创建一个单独且隔离的进程,一个进程的失败不会影响其他进程。

线程:线程是进程中的基本执行单元,进程的入口点创建的第一个线程被称为主线程。.net执行程序使用Main()方法作为程序入口点。仅包含一个主线程的进程是线程安全的,这是由于在某个特定时刻只有一个线程访问程序中的数据,但是单线程在执行耗时长的复杂操作时,对用户来说会显得像没有响应一样。为了解决单线程的缺陷,可以构建次线程,每一个线程都是进程中的一个独立执行单元,能够同时访问那些共享数据。

简单的说,线程是windows进程中的独立执行单元。每一个进程都有一个主线程,且每个进程还可以创建额外的线程。

应用程序域:在.net平台下,可执行程序并没有直接承载在windows进程中,而传统的非托管程序是直接承载的。.net可执行程序承载在进程中的一个逻辑分区中,术语成为应用程序域(AppDomain)。一个进程可以包含多个应用程序域,每一个应用程序域中承载一个.net可执行程序。

对象上下文边界:应用程序域可以进一步被划分成多个上下文边界。简单的说,对象上下文为应用程序域中的给定对象划分指定逻辑容器。

小结:一个.net进程可以承载多个应用程序域。每一个应用程序域可以承载多个相关的.net程序集,一个给定的应用程序域中包含一个或多个上下文,使用上下文,可以将指定对象放置到一个逻辑容器中,确保该对象的需求能够被满足。理解这些基本概念的是为.net多线程开发打下基础。

时间: 2024-08-09 21:52:25

深入理解.net多线程(一)的相关文章

总结下自己理解的多线程知识

1.多线程概念进程:一个正在运行的程序就可以看作是一个进程.每个进程都有自己独立的内存空间.线程:一个程序的执行顺序控制流就可以看作是一个线程.进程和线程的区别:1.每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销.2.线程可以看成时轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小.多进程:在操作系统中能同时运行多个程序(任务)多线程:在同一应用程序中有多个顺序流同时执行,在一个进程里可以有1条或多条线程,但是至少

3.如何理解开多线程可以充分利用CPU?

如何理解开多线程可以充分利用CPU? <1>操作系统采用时间片轮转调度算法分配的时间片给每个进程中的线程 <2>操作系统的时间片轮转调度算法分配的时间片 在别的进程中都没有准备好( 比如在访问网络)的时候,自己的主线程也在访问网络,导致这个时间片空闲浪费了,但是当此时这个进程中有多个子线程的时候,而且处于等待时机,这个本来空闲的将要浪费掉的时间片就会分配给这个子线程,起到充分利用CPU,提高任务执行效率的作用.       实际上,CPU不可能得到100%的利用,肯定有浪费的,而开

更好的理解java多线程

1.线程的创建 之前知道Java中一个多线程的创建方法是继承Thread类或者实现Runable接口,但是看不懂下面这种创建线程的方法 第一种 [java] view plain copy print? new Thread(new Runnable() { @Override public void run() { } } }).start();//这种方式中new Thread()是创建了一个线程,而new Runable()对象中是线程想要执行的代码,这样把想要执行的代码放到一个创建的对象

彻底理解Python多线程中的setDaemon与join【配有GIF示意】

在进行Python多线程编程时, join() 和 setDaemon() 是最常用的方法,下面说说两者的用法和区别. 1.join () 例子:主线程A中,创建了子线程B,并且在主线程A中调用了B.join(), 那么,主线程A会在调用的地方阻塞,直到子线程B完成操作后,才可以接着往下执行. 2.setDaemon() 例子:主线程A中,创建了子线程B,并且在主线程A中调用了B.setDaemon(), 即:把主线程A设置为守护线程,这时候,要是主线程A执行结束了,就不管子线程B是否完成,一并

Python学习心得(七) 深入理解threading多线程模块

Python提供了多个模块来支持多线程编程,包括thread.threading和queue模块等.thread模块提供了基本的线程和锁定支持:而threading模块提供了更高级别.功能更全面的线程管理.queue模块,用户可以创建一个队列数据结构,用于在多线程之间进行共享. 核心提示:避免使用thread模块 推荐使用更高级别的threading模块,原因如下: 1.threading模块更加先进,有更好的线程支持,并且thread模块中的一些属性会和threading模块有冲突: 2.低级

理解 Java 多线程

并发与并行 并发:指两个或多个事件在同一时间段内发生. 并行:指两个或多个事件在同一时刻发生(同时发生). 进程与线程 进程: 是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程:进程也是程序的一次执行过程,是系统运行程序的基本单位:系统运行一个程序即是一个进程从创建.运行到消亡的过程. 线程: 线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程.一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序. 简而言之:

从JAVA多线程理解到集群分布式和网络设计的浅析

对于JAVA多线程的应用非常广泛,现在的系统没有多线程几乎什么也做不了,很多时候我们在何种场合如何应用多线程成为一种首先需要选择的问题,另外关于java多线程的知识也是非常的多,本文中先介绍和说明一些常用的,在后续文章中如果有必要再说明更加复杂的吧,本文主要说明多线程的一下几个内容: 1.在应用开发中什么时候选择多线程? 2.多线程应该注意些什么? 3.状态转换控制,如何解决死锁? 4.如何设计一个具有可扩展性的多线程处理器? 5.多线程联想:在多主机下的扩展-集群? 6.WEB应用的多线程以及

对JAVA多线程 并发编程的理解

对JAVA多线程并发编程的理解 Java多线程编程关注的焦点主要是对单一资源的并发访问,本文从Java如何实现支持并发访问的角度,浅析对并发编程的理解,也算是对前段时间所学的一个总结. 线程状态转换 Java语言定义了5中线程状态,在任何一个时间点,一个线程只能有且只有其中一种状态,这5中状态分别是: ?  新建(New):创建后尚未启动的线程处于这种状态 ?  运行(Runable):Runable包括了操作系统线程状态中的Running和Ready,也就是处于此状态的线程可能正在执行,也有可

Python的多线程理解,转自虫师https://www.cnblogs.com/fnng/p/3670789.html

多线程和多进程是什么自行google补脑 对于python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂.所以,这里力图用简单的例子,让你对多线程有个初步的认识. 单线程 在好些年前的MS-DOS时代,操作系统处理问题都是单任务的,我想做听音乐和看电影两件事儿,那么一定要先排一下顺序. (好吧!我们不纠结在DOS时代是否有听音乐和看影的应用.^_^) from time import ctime,sleep def music(): for i in range(2): prin