[TOC]

概述

多线程优点

方便高效的内存共享多进程下内存共享比较不便,且会抵消掉多进程编程的好处

较轻的上下文切换开销不用切换地址空间,不用更改CR3寄存器,不用清空TLB

线程上的任务执行完后自动销毁

多线程缺点

开启线程需要占用一定的内存空间(默认情况下,每一个线程都占512KB)

如果开启大量的线程,会占用大量的内存空间,降低程序的性能

线程越多,cpu在调用线程上的开销就越大

程序设计更加复杂,比如线程间的通信、多线程的数据共享

归纳总结

综上得出,多线程不一定能提高效率,在内存空间紧张的情况下反而是一种负担,因此在日常开发中,应尽量

不要频繁创建,销毁线程,使用线程池

减少线程间同步和通信(最为关键)

避免需要频繁共享写的数据

合理安排共享数据结构,避免伪共享(false sharing)

使用非阻塞数据结构/算法

避免可能产生可伸缩性问题的系统调用(比如mmap)

避免产生大量缺页异常,尽量使用HugePage

可以的话使用用户态轻量级线程代替内核线程