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

进程:进程是一个操作系统级别的概念,用来描述一组资源和程序运行所必需的内存分配。简单的理解,可以认为进程就是一个运行程序。对于每一个被加载到内存的*.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. There was a problem parsing the package(android)

    android phone when you install the application there will inevitably be "a problem parsing the ...

  2. 通过Maven配置测试环境和开发环境连接不同的数据库

    通过Maven配置测试环境和开发环境连接不同的数据库   作者及来源: 通灵宝玉 - 博客园    收藏到→_→: 此文来自: 马开东博客 网址:http://www.makaidong.com   ...

  3. 【转载】StringUtils方法介绍

    org.apache.commons.lang.StringUtils中方法的操作对象是java.lang.String类型的对象,是JDK提供 的String类型操作方法的补充,并且是null安全的 ...

  4. 简单的JDBC连接oracle数据库例子

    java连接Oracle数据库 JDBC(Java Data Base Connectivity,java数据库连接),那么我们该如何用java进行数据库的连接呢. import java.sql.C ...

  5. LR错误整理

    1.LoadRunner超时错误: 在录制Web服务器端,如果超过120秒服务器协议脚本回放时超时情况经常出现,产生错误的原因也有很多,解决的方法也不同. 错误现象1:Action.c(16): Er ...

  6. Tsung记录

    1.提高Tsung登录用户数 ulimit -n (65530)修改系统最大连接数,Tsung压力机和服务器都需要更改

  7. Python 正则表达式学习笔记

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...

  8. nefu 899这也是裸的找

    #include <iostream> #include <algorithm> #include <cstdio> using namespace std; in ...

  9. how to use tar?

    In UNIX, tar is the most useful tool to compress files (just like zip in Windows.) To compress, inpu ...

  10. Flex4 flashVars 传值

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or ...