临时文章--

多线程编程:

Win32多线程程序设计侯捷

Linux多线程服务端编程

 

多任务执行举例:

1个cpu,执行10个函数

前10ms执行函数1,中间20ms执行函数2......

不断进行切换,其实这个不是真正的并发,是假象;切换中还要不断保存现场和回复现场,会有一些开销。

这些保存在操作系统中的一些结构体中。

 

2、变成了多个CPU,用于服务器和高性能计算领域

硬件并发,8个任务4个cpu,那还得切换

任务管理器->性能,同时有2980个任务在同时执行

 

 每个任务都能获得cpu的执行时间,那搞3000核的cpu。其中有调度算法

 

3 可执行程序:

exe,rwx(x就是)

 

4 进程:(helloworld就是一个进程)

就是一个可执行程勋运行起来了,就叫创建了一个进程

双击2次exe,就是两个进程

每个进程都有一个主线程,并且唯一;主线程在执行main函数:

 

5 线程:25:11

线程是用来执行代码的

可以自己写代码创建其它线程,走的别的道路,

 

 线程并不是越多越好,每个线程都需要一个独立的堆栈空间(1M)

 

6 必须用线程的例子

 

服务用多线程,因为会有太多的客户端需求,只有多线程能解决。

多线程就是并发吗?(是,但是多个进程也是并发)

多线程访问同一资源的问题。

 

 

 

 

 

游戏都有账号服务器和逻辑服务器,这个肯定就是两个进程。

同一电脑的进程间通信技术:管道、文件、消息队列、共享内存等等。(这些不讲)

 

https://www.bilibili.com/video/BV1Yb411L7ak?p=3&vd_source=8fb98cc8bb56bb773472bef9f0105011

6、多线程并发:(轻量级进程)

共享内存!!!!!!!!!问题:访问同一数据。互斥锁。

优先考虑多线程并发,而不是多进程并发

 

 

 临界区,互斥量,这些是啥?

 

 整个进程是否执行完毕的标志:主线程是否执行完毕。

 

 J 阻。

 

 可调用对象是啥?

int main()
{
thread mytobj(myprint); // 线程就是用来执行一段代码
mytobj.join(); // 这个join什么意思?

cout << "hello" << endl;
return 0;
}

去掉join报错,因为主线程执行完了,子线程没有执行完!!!

比如子线程在写文件,突然主程序自己退出了!!!

 

用detach(),主线程可以不等子线程,自己先退出。用detach,主线程和子线程失去联系,子线程被C++运行时接管!执行完后,由运行时库释放资源(守护线程)

但老师建议还是等!

 

detach()之后, myprint就会到后台,用的少。

joinable():看到57分钟

https://www.bilibili.com/video/BV1Yb411L7ak?p=4&spm_id_from=pageDriver&vd_source=8fb98cc8bb56bb773472bef9f0105011

 

7、创建线程,就是定义一个线程对象

thread mytobj(myprint); // 这个参数是可调用对象,函数就是个可调用对象

其它创建线程的方法(仿函数):

 

这里有个坑:

 

 再次说一下detach:主线程和子线程分开执行,会有很多异常情况。

如上,子线程使用的是主线程的局部变量,当主线程执行完毕,这个局部变量已经被回收了,而子线程还在运行!!!

还有个问题:主线程结束,ta被销毁,但为什么用这个ta没问题?

解答:ta这个对象确实不在了,但这个对象被复制到线程中去了!!怎么证明:

结论:线程中少用引用!

8、用lambda表达式创建线程

 

这个lambda和qt里遇到的还有点不一样!

 

10、给线程传递参数

直接在创建线程的时候传递就行了

detach可以把很多事情搞的非常复杂

 

设置断点,F5调试模式下,用shift + F9,可以用来监视变量

 

引用传递在建立线程时竟然会变成值传递,刷新了认知

内存窗口:调试->窗口->内存

可以经常看一下主线程参数和子线程进去之后对象的地址

解决方案:

 

21分26秒。mybuf被回收之后,才被转成string,这就不行了!!

什么时候转的呢?

32分钟

 

posted @   妖山鬼店  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示