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

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

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

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

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

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

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

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

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

    如何理解开多线程可以充分利用CPU? <1>操作系统采用时间片轮转调度算法分配的时间片给每个进程中的线程 <2>操作系统的时间片轮转调度算法分配的时间片 在别的进程中都没有准备 ...

  2. 多线程协作wait、notify、notifyAll方法简介理解使用 多线程中篇(十四)

    在锁与监视器中有对wait和notify以及notifyAll进行了简单介绍 所有对象都有一个与之关联的锁与监视器 wait和notify以及notifyAll之所以是Object的方法就是因为任何一 ...

  3. 谈谈你对Java多线程的理解以及多线程的实现方式

    说线程之前先说进程,何为进程?进程就是正在进行中的程序.比如电脑同时在运行QQ进程.cmd进程.wps进程.飞秋进程等.在某一时刻,CPU只能执行一个程序,只是在做快速切换,我们肉眼看不出来. 比如: ...

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

    在进行Python多线程编程时, join() 和 setDaemon() 是最常用的方法,下面说说两者的用法和区别. 1.join () 例子:主线程A中,创建了子线程B,并且在主线程A中调用了B. ...

  5. 深入理解Java多线程——线程池

    目录 为什么需要线程池 定义 ThreadPoolExecutor 工作队列workQueue 不同的线程池 Executor 线程池的工作原理 线程池生命周期 线程池增长策略 线程池大小的设置 线程 ...

  6. 深入理解Java多线程——ThreadLocal

    目录 定义 API 场景分析 场景实验,观察Spring框架在多线程场景的执行情况 10000此请求,单线程 10000次请求,线程数加到100 对c的访问加锁 把c设为ThreadLocal 收集多 ...

  7. 深入理解 Java 多线程核心知识

    多线程相对于其他 Java 知识点来讲,有一定的学习门槛,并且了解起来比较费劲.在平时工作中如若使用不当会出现数据错乱.执行效率低(还不如单线程去运行)或者死锁程序挂掉等等问题,所以掌握了解多线程至关 ...

  8. 2018跳槽面试必备之深入理解 Java 多线程核心知识

    导语:多线程相对于其他 Java 知识点来讲,有一定的学习门槛,并且了解起来比较费劲.在平时工作中如若使用不当会出现数据错乱.执行效率低(还不如单线程去运行)或者死锁程序挂掉等等问题,所以掌握了解多线 ...

  9. 深入理解 Java 多线程核心知识:跳槽面试必备

    多线程相对于其他 Java 知识点来讲,有一定的学习门槛,并且了解起来比较费劲.在平时工作中如若使用不当会出现数据错乱.执行效率低(还不如单线程去运行)或者死锁程序挂掉等等问题,所以掌握了解多线程至关 ...

随机推荐

  1. JavaScript 构造函数 prototype属性和_proto_和原型链 constructor属性 apply(),call()和bind() 关键字this

    1.构造函数: 通常构造函数首字母需要大写,主要是为了区别ECMAScript的其它函数.(高程三 P145) 构造函数与其他函数的唯一区别,就在于调用它们的方式不同.只要通过new来调用,任何函数都 ...

  2. php 分页类(1)

    inter.php <head> <meta http-equiv="Content-Type" content="text/html; charset ...

  3. C中内存分配方式[转载]

    在C 中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 一.简介: 1.栈,就是那些由编译器在需要的时候分配,在无需的时候自动清除的变量的存储区.里面的变量通常是局部变 ...

  4. 50个很棒的Python模块

    50个很棒的Python模块 我很喜欢Python,Python具有强大的扩展能力,我列出了50个很棒的Python模块,包含几乎所有的需要:比如Databases,GUIs,Images, Soun ...

  5. win7系统,apache2.2下添加PHP5的配置详解

    首先要说apache(服务器). php(开发语言). mysql(数据库) 之间的关系. Apache:为系统提供了Web服务支持,网站:http://www.apache.org/ PHP:为系统 ...

  6. nefu 449 超级楼梯 &&nefu 911 跨楼梯

    nefu 449 超级楼梯 Description 有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法? Input 输入数据首先包含一个整数N,表示测试实例的 ...

  7. permutation求全排列

    include <iostream> #include <string> using namespace std; void swap(char &c1, char & ...

  8. js纯ajax

    var XMLHttpReq; function createXMLHttpRequest() { try { XMLHttpReq = new ActiveXObject("Msxml2. ...

  9. cmd命令行查看当前系统版本和版本是32位还是64位

  10. laravel多种安装方法

    首先请确保环境为 PHP >= 5.5.9 OpenSSL PHP 扩展 PDO PHP 扩展 Mbstring PHP 扩展 Tokenizer PHP 扩展 方法一: 直接下载安装好的lar ...