多线程的开销与好处
2012-11-07 14:19
183 查看
线程创建之前
1.系统为线程分配并初始化一个线程内核对象;
2.系统为每个线程保留1MB的地址空间(按需提交)用于线程用户模式堆栈;
3.系统为线程分配12KB(左右)的地址空间用于线程的内核模式堆栈。
线程创建之后
4.Windows调用当前进程中的每个DLL都有的一个函数,用来通知进程中的所有DLL,操作系统创建了一个新的线程。
销毁一个线程时
5.当前进程中的所有DLL都要接收一个关于该线程即将"死亡"的通知;
6.线程的内核对象及创建时系统分配的堆栈需要释放。
如果某台计算机只有一个CPU的话,则在某一时刻只有一个线程可以运行。
Windows必须跟踪记录线程对象,而且不停地跟踪记录每个线程对象。
Windows必须决定CPU下一个次(每隔约20毫秒)调度那一个线程使其运行。
上下文切换(Context switch):Windows使CPU停止执行一个线程的代码,而开始执行另一个线程的代码的现象,我们称之为上下文切换。
上下文切换的开销:
1.进入内核模式;
2.将CPU的寄存器保存到当前正在执行的线程的内核对象中。
注明:X86架构下CPU寄存器占了大约700字节(Byte)的空间,X64架构下CPU寄存器大约占了1024(Byte)的空间,IA64架构下CPU寄存器占了大约2500Byte的空间。
3.需要一个自旋锁(spin lock),确定下一次调度那一个线程,然后再释放该自旋锁。
如果下一次调度的线程属于同一个进程,哪么此处开销更大,因为OS必须先切换虚拟地址空间。
4.把即将要运行的线程的内核对象的地址加载到CPU寄存器中。
5.退出内核模式。
以上都是纯粹的开销,导致Windows和应用程序的执行速度比在单线程系统上的执行速度慢。
综上所述:应尽量限制线程的使用。
多线程的带来的好处:
1.健壮性。
此线程的错误不会影响彼线程。
2.可扩展性。
多个CPU情况下,可充分发挥多个CPU的优势。
1.系统为线程分配并初始化一个线程内核对象;
2.系统为每个线程保留1MB的地址空间(按需提交)用于线程用户模式堆栈;
3.系统为线程分配12KB(左右)的地址空间用于线程的内核模式堆栈。
线程创建之后
4.Windows调用当前进程中的每个DLL都有的一个函数,用来通知进程中的所有DLL,操作系统创建了一个新的线程。
销毁一个线程时
5.当前进程中的所有DLL都要接收一个关于该线程即将"死亡"的通知;
6.线程的内核对象及创建时系统分配的堆栈需要释放。
如果某台计算机只有一个CPU的话,则在某一时刻只有一个线程可以运行。
Windows必须跟踪记录线程对象,而且不停地跟踪记录每个线程对象。
Windows必须决定CPU下一个次(每隔约20毫秒)调度那一个线程使其运行。
上下文切换(Context switch):Windows使CPU停止执行一个线程的代码,而开始执行另一个线程的代码的现象,我们称之为上下文切换。
上下文切换的开销:
1.进入内核模式;
2.将CPU的寄存器保存到当前正在执行的线程的内核对象中。
注明:X86架构下CPU寄存器占了大约700字节(Byte)的空间,X64架构下CPU寄存器大约占了1024(Byte)的空间,IA64架构下CPU寄存器占了大约2500Byte的空间。
3.需要一个自旋锁(spin lock),确定下一次调度那一个线程,然后再释放该自旋锁。
如果下一次调度的线程属于同一个进程,哪么此处开销更大,因为OS必须先切换虚拟地址空间。
4.把即将要运行的线程的内核对象的地址加载到CPU寄存器中。
5.退出内核模式。
以上都是纯粹的开销,导致Windows和应用程序的执行速度比在单线程系统上的执行速度慢。
综上所述:应尽量限制线程的使用。
多线程的带来的好处:
1.健壮性。
此线程的错误不会影响彼线程。
2.可扩展性。
多个CPU情况下,可充分发挥多个CPU的优势。
相关文章推荐
- HQL或SQL使用?带来的好处:减少SQL解析时间、降低内存开销、防止SQL注入
- 比较Jmeter、Grinder和JAVA多线程本身压力测试所带来的性能开销
- 【使用线程池的好处】多线程的环境中,尽量采用线程池
- OpenMP与C++:事半功倍地获得多线程的好处
- 【使用线程池的好处】多线程的环境中,尽量采用线程池
- 多线程-同步代码块解决线程安全问题的解释以及同步的特点及好处和弊端
- Java并发编程(Java Concurrency)(2)- 多线程的好处
- OpenMP与C++:事半功倍地获得多线程的好处(上)
- Java并发编程---多线程的好处
- 实现多线程的两种方式,区别和好处有哪些
- 15-多线程(同步代码块) 16-多线程(同步的好处和弊端)图解 16-多线程(同步的好处和弊端) 18-多线程(同步函数)
- 记录时间开销的好处
- OpenMP与C++:事半功倍地获得多线程的好处(下)
- 牛客网Java刷题知识点之什么是进程、什么是线程、什么是多线程、多线程的好处和弊端、多线程的创建方式、JVM中的多线程解析、多线程运行图解
- 修改版: 小伙,多线程(GCD)看我就够了,骗你没好处!
- OpenMP与C++:事半功倍地获得多线程的好处(上)
- OpenMP与C++:事半功倍地获得多线程的好处(上)
- 多线程的运用和好处
- OpenMP与C++:事半功倍地获得多线程的好处
- 【使用线程池的好处】多线程的环境中,尽量采用线程池