-
进程和线程的异同点?线程之间如何进行通信?进程之间如何进行通信?
-
两个进程间的两个线程通信,相当于进程间通信:无名管道、有名管道、信号、信号量、消息队列、套接字、共享内存
-
一个进程中的两个线程间通信方式:互斥锁、条件变量condition_variable、信号量、读写锁shared_lock
-
互斥锁:在构造函数里加锁,在析构函数里解锁
-
条件变量:互斥量可以保护共享数据的修改,如果线程正在等待共享数据的某个条件出现,仅用互斥量的话就需要反复对互斥对象锁定解锁,以检查值的变化,这样将频繁查询的效率非常低。条件变量可以让等待共享数据条件的线程进入休眠,并在条件达成时唤醒等待线程,提供一种更高效的线程同步方式。条件变量一般和互斥锁同时使用,提供一种更高效的线程同步方式。
-
-
可以去看一下公众号“搞嵌入式的锋”中的“c++ 线程间通信方式”这篇文章
-
-
匿名管道和命名管道的区别是什么?
-
你说线程是共享资源的,那你知道线程之间有什么资源可以共享,什么资源不能共享吗?
-
线程/进程间通信
-
线程间资源是共享的,讲安全:共享变量、信号量、wait/notify机制、锁、原子操作
-
进程间资源是独立的,讲通讯:信号、信号量、管道、共享内存、消息队列、socket
-
-
进程和线程的优缺点
-
讲一下线程同步问题
-
线程有可能其他线程共享内存、文件、数据库等资源。当多个线程同时读写同一份共享资源的时候,可能会引起冲突。
-
所我们需要引入“线程同步”机制(对线程进行同步操作),即各个线程间要有先来后到。
-
线程同步的本质是:排队。一个一个排队对共享资源进行操作,而不是同时操作。
-
线程同步的目的:避免线程“同步”执行。
-
线程同步注意点
-
共享:只有共享资源的读写访问才需要同步。如果不是共享资源就根本不需要进行同步
-
只有“变量”才需要同步访问。如果共享的资源是固定不变的,那么就相当于“常量”,线程同时读取常量也不需要同步。至少一个线程修改共享资源,这样的情况下,线程之间就需要同步。
-
多个线程访问共享资源的代码有可能是同一份代码,也有可能是不同的代码;无论是否执行同一份代码,只要这些线程的代码访问同一份可变的共享资源,这些线程之间就需要同步。
-
-
-
线程同步怎么处理/线程同步的方法/线程同步的基本实现思路/如何在线程之间共享资源
-
多线程访问共享内存,为了实现同步,常采用加锁的方式。
-
可以给共享资源加一把锁,这把锁只有一把钥匙。哪个线程获取了这把钥匙,才有权利访问该共享资源。
-
同步锁加在共享资源的代码段上。(一些比较完善的共享资源,比如,文件系统,数据库系统等,自身都提供了比较完善的同步锁机制。我们不用另外给这些资源加锁,这些资源自己就有锁。)但大部分情况下,我们在代码中访问的共享资源都是比较简单的共享对象。这些对象里面没有地方让我们加锁。
-
-
除了加锁还有什么别的方式/还有什么方法解决资源竞争的问题/如何采用不加锁的方式实现线程同步
-
互斥锁、条件变量、信号量和读写锁。
-
https://blog.csdn.net/angqishe7119/article/details/101279761?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=1328679.65019.16164904867905151&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control、https://blog.csdn.net/qq_41248872/article/details/82991949?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
-
-
进程线程相关,通信如何进行?在代码中实现过吗?怎么用的?
-
多进程和多线程?平常用哪个更多?用过多进程吗?
-
chrome是多进程还是多线程的?为什么chrome一个标签崩了整个浏览器也崩了
-
问引用计数和实现起来时候需要注意的事情(多线程)
-
几种多线程的锁:互斥量/互斥锁、读写锁/共享互斥锁、自旋锁、条件变量、屏障。名词解释和代码见:https://blog.csdn.net/bian_cheng_ru_men/article/details/80210501?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
-
为什么要有虚拟内存?好处是什么?
-
进程间共享机制
-
线程的各种状态以及转化
-
生产者消费者模型
-
文件管理系统、存储系统、磁盘扇区、分页分段段页结合等
-
进程调度算法
- LRU页面置换算法:选择最长时间没有被引用的页面进行置换(移出内存而腾出空间来加载另外的数据)
-
虚拟内存和物理内存
-
协程高效在哪
-
你了解进程的内存结构吗?
-
了解多线程吗?在具体使用时需要注意什么呢?
-
在同一进程下的两个线程a和b,在线程a中有一个static变量,线程b能访问得到吗,在线程a中new一个对象,线程b能访问得到吗。
-
在两个进程中,申请的指针,可能指向同一片内存吗
- 不要让两个指针指向同一块内存,可能会造成的问题:1容易引发多次释放同一块内存;2容易引发野指针
-
物理地址和逻辑地址
-
物理地址:加载到内存地址寄存器中的地址,内存单元的真正地址。
-
逻辑地址:CPU生成的地址。逻辑地址是内部和编程使用的,不唯一。比如:可以读取指针变量本身值(&操作),这个值就是逻辑地址,它是相对于你当前进程数据段的地址(偏移地址),不和绝对物理地址相干。
-
-
代码中的变量是逻辑地址还是物理地址(逻辑地址)
-
怎么通过逻辑地址找到物理地址(属于微机原理内容!?)
- 逻辑地址左移四位加偏移地址就是物理地址
-
给一道多进程和多线程的场景题。这个场景下会出现什么问题?为什么会出现这样的问题?你会如何解决呢
-
阻塞IO和非阻塞IO
-
阻塞IO:
-
非阻塞IO典型应用:socket
-
非阻塞IO特点:进程轮询(重复)调用,消耗CPU的资源;实现难度低、开发应用相对阻塞IO模式较难;适用并发量较小、且不需要及时响应的网络应用开发;
-
-
同步IO和异步IO的区别?
-
IO多路复用如何实现的?在实际应用当中解决了什么问题?给了一个场景
-
什么是IOCP?
-
32位操作系统会为每个进程分配多大的内存空间?为什么能为每个进程分配那么多虚拟内存空间?地址空间是连续的吗?
-
如果拔掉服务器网线和关掉对应的进程端口号,这两种有什么区别,客户端会发生什么情况?
-
实现一个线程池子,如何保证不让线程数超出,如何实现。