一、课程信息
打卡时间:2022.8.7
课程名称:C/C++气象数据中心实战,手把手教你做工业级项目
章节名称:开发基于tcp协议的文件传输子系统 4-10
讲师: 长歌_吴从周
二、今日课程
课程内容:(1)继续搭建TCP客户端上传程序和服务器的框架 (2)学习了线程相关知识
三、学习心得
3.1 搭建TCP客户端上传程序和服务器的框架
今天补充了tcp客户端上传程序的主要业务函数:bool _tcpputfiles()。这个函数的主要流程包括:1.调用OpenDir()打开starg,clientpath目录 2. 遍历目录中的每个文件,调用ReadDir获取一个文件名 3.把文件名、修改时间,文件大小组成报文发送给对端 3.把文件的内容发送给对端(未完成) 4.接收对端的确认报文 5. 删除或者转存本地文件。函数写完后出了一些bug,还在调试中…
3.2 今天顺便补充了线程的相关知识
线程允许应用程序并发执行多个任务的一种机制。一个进程可以包含多个线程,同一个程序中的所有 线程均会独立执行相同的程序,且共享同一份去安居内存区域,其中包括初始化数据段、未初始化数据以及堆内存端段。
进程是CPU分配资源的最小单位,线程是操作系统调度执行的最小单位。
线程是轻量级的进程,在Linux环境下现成的本质仍是进程.
查看指定进程的LWP(线程)号:PS -Lf pid
线程和进程的区别:
1)进程间的信息难以共享。由于除去只读代码段外,父子进程并未共享内存,因此必须采用一些进程间通信的方式,在进程间进行信息交换。
2)调用fork()来创建进程的代价相对较高,即便利用写时复制技术,仍然需要复制诸如内存页表和文件描述符之类的多种进程属性2,这意味着fork()调用在时间上的开销仍然不菲。
3)线程之间能够方便、快速地共享信息。只需将数据复制到共享(全局或堆)变量中即可。
4)创建线程比创建进程通常要快10倍甚至更多。线程之间是共享虚拟地址空间的,无需采用写时复制来复制内存,也无需复制页表。
◼ 共享资源
进程 ID 和父进程 ID
进程组 ID 和会话 ID
用户 ID 和 用户组 ID
文件描述符表
信号处置
文件系统的相关信息:文件权限掩码
(umask)、当前工作目录
虚拟地址空间(除栈、.text)
◼ 非共享资源
线程 ID
信号掩码
线程特有数据
error 变量
实时调度策略和优先级
栈,本地变量和函数的调用链接信息
四、学习截图
共同学习,写下你的评论
评论加载中...
作者其他优质文章