临时文章--
多线程编程:
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分钟
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义