当前位置: 首页 > news >正文

做网站开发要装什么软件seo怎么搞

做网站开发要装什么软件,seo怎么搞,网站备案号如何获得,现在网站还用asp做💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:Linux从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学更多操作系统知识   🔝🔝 Linux线程 1. 前言2. 什么是线…

💓博主CSDN主页:杭电码农-NEO💓

⏩专栏分类:Linux从入门到精通⏪

🚚代码仓库:NEO的学习日记🚚

🌹关注我🫵带你学更多操作系统知识
  🔝🔝


在这里插入图片描述

Linux线程

  • 1. 前言
  • 2. 什么是线程?
  • 3. 线程和进程的区别和联系
  • 4. Linux下如何操作线程?
  • 5. pthread线程库讲解
  • 6. 线程和前面知识的汇总
  • 7. 总结以及拓展

1. 前言

可能大家对多线程这三个字早有耳闻,
那么到底什么是线程?为什么要有它?
它和进程之间有什么联系?

本章重点:

本篇文章着重讲解线程的基本概率,
以及进程和线程的对比,最后会讲解
在Linux下如何创建,控制,终止,等待线程


2. 什么是线程?

程序中的一个执行路线就叫做线程

一个进程至少要有一个执行线程,单个进程本身就是一个执行流,所以单个进程某种意义上也是一个线程(是主线程).线程在进程内部运行,本质是在进程地址空间内运行.在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化

在Linux系统下,线程是轻量化的进程,我们知道进程有PCB结构和程序地址空间,那么线程的话只有PCB,它的地址空间是和主线程共享的,如下图:

在这里插入图片描述

综上所述,线程就是一个没有独立的地址空间的PCB结构,线程的资源是从最开始的主线程,也就是进程来的.而站在CPU的视角,CPU调度的是PCB结构,CPU只认PCB,它并不关心此PCB是进程的还是线程的,所以线程被称为系统调度的基本单位.而在Linux操作系统下,线程就是轻量化的进程


3. 线程和进程的区别和联系

通过上面对线程的描述,我们可以窥探到:

  1. 线程是担任系统调度的基本实体
  2. 进程是担任系统资源分配的基本实体

虽然线程共享进程数据,但也拥有自己的数据:

  • 线程ID
  • 栈区资源
  • 信号屏蔽字
  • 调度优先级

在这里插入图片描述

使用指令: ps -al查看线程ID

在这里插入图片描述

主线程的PID和LWP相同,CPU调度时是在看LWP,而不是PID,线程的PID和主线程相同,自己独有LWP

在这里插入图片描述


4. Linux下如何操作线程?

在这里插入图片描述

由于pthred是第三方库
所以编译时要加上-lpthread的字段

  1. 如何创建线程

在这里插入图片描述

第一个参数需要传入一个pthread_t类型的变量,这个变量我们需要先定义.所谓的pthread_t,实际上本质就是unsigned long int类型,第二个参数我们一般设置为空.第三个参数要传入线程启动后要执行的函数的地址,这个函数的返回值和参数都是void*,最后一个参数是传入给函数形参的,要强转为void*

一般的编码格式:

void *route(void *arg) {while(1) {printf("I'am a thread \n");sleep(1);}
}
int main()
{pthread_t tid;int ret;if ( (ret=pthread_create(&tid, NULL, rout, NULL)) != 0 ) {fprintf(stderr, "pthread_create : %s\n", strerror(ret));exit(-1); //如果创建线程失败会走进此语句}int i;for(; ; ) {printf("I'am main thread\n");sleep(1);}return 0;
}
  1. 如何终止线程

在这里插入图片描述

一般使用return返回的来终止线程

  1. 如何进行线程等待

在这里插入图片描述

假如不进行线程等待,可能会出现类似于僵尸进程的问题

一般编码格式:

void *thread_run( void * arg )
{pthread_detach(pthread_self());printf("%s\n", (char*)arg);return NULL;
}
int main( void )
{pthread_t tid;if ( pthread_create(&tid, NULL, thread_run, "thread1 run...") != 0 ) {printf("create thread error\n");return 1;}int ret = 0;sleep(1);//很重要,要让线程先分离,再等待if ( pthread_join(tid, NULL ) == 0 ) {printf("pthread wait success\n");ret = 0;} else {printf("pthread wait failed\n");ret = 1;}return ret;
}
  1. 如何进行线程分离

假如创建一个线程后,不想关心它的返回值,此时使用join等待实际上是一种负担,所以使用线程分离后,可以把创建的线程和主线程分离,这样就不会影响到主线程

在这里插入图片描述

pthread_self()函数可以返回当前线程的线程ID,所以假设我们想要当前线程与主线程脱离关系,可以这样写: pthread_detach(pthread_self());

一般编码格式:

void *thread_run( void * arg )
{pthread_detach(pthread_self());printf("%s\n", (char*)arg);return NULL;
}
int main( void )
{pthread_t tid;if ( pthread_create(&tid, NULL, thread_run, "thread1 run...") != 0 ) {printf("create thread error\n");return 1;}int ret = 0;sleep(1);//很重要,要让线程先分离,再等待if ( pthread_join(tid, NULL ) == 0 ) {printf("pthread wait success\n");ret = 0;} else {printf("pthread wait failed\n");ret = 1;}return ret;
}

5. pthread线程库讲解

首先,pthread_create的返回值是线程ID.
那么线程ID的本质是什么呢?

答案是,线程ID的本质是一个地址,pthread库是一个动态库,是第三方库,这个库会被映射到进程的地址空间的共享区中,而线程ID所指的地址则是pthread这个库层面上,线程集合的起始地址

在这里插入图片描述

再回忆一下刚才的内容,线程有自己的栈区,也就是说线程要维护自己的栈区,那么可以联想一下,谁帮线程维护这个栈区呢?答案是pthread库维护的栈区,也就是说其实线程的栈区也是被映射到共享区的,由pthread第三方库维护


6. 线程和前面知识的汇总

这里有三个问题要思考一下:

  1. 线程异常退出后,主线程也会退出吗?
  2. 线程可以用fork创建子进程吗?
  3. 线程可以进行进程程序替换吗?
  • 第一个问题

一个进程(主线程)可以拥有多个线程,这多个线程只要其中一个线程发生错误,导致此线程退出,那么所有的线程包括主线程都会退出.所以在编写线程函数时,一定要多加小心

  • 第二个问题

线程可以通过函数fork来创建子进程,并且在实际运用中是有被使用到的实例

  • 第三个问题

线程不能进行进程程序替换,因为线程是共用主线程的资源,一旦一个线程进行进程程序替换后,所有的线程包括主线程的代码都会被替换为别的程序,这显然是不正确的


7. 总结以及拓展

最后,创建线程有优点也有缺点,在实际
编写代码中大家根据自己的需求来定

在这里插入图片描述
在这里插入图片描述

在某些多线程的场景下,执行一段代码可能会出现不一样的结果,这就是线程的安全问题,关于线程的安全问题以及线程互斥和线程同步的概率会在下一篇文章讲解


http://www.bjxfkj.com.cn/article/100435.html

相关文章:

  • 医院网站制作百度建站平台官网
  • 旅游便宜的网站建设怎么在百度上发布个人文章
  • 电信 网站备案百度站长工具验证
  • 废品网站怎么做中国推广网
  • 郑州商城网站制作青岛seo优化公司
  • web移动端网站开发案例seo关键词有话要多少钱
  • wordpress分类访问权限seo网站关键词优化软件
  • 网站的开发工具有哪些抖音广告推广怎么收费
  • 网站开发的分工杭州网络推广有限公司
  • 做图片素材的网站有哪些信息如何优化上百度首页
  • 商务网站建设管理思路学网络营销有用吗
  • vs做的网站怎么放到iis中舆情分析报告
  • 换空间对网站排名的影响吗福鼎网站优化公司
  • 安徽房和城乡建设部网站windows优化大师怎么样
  • 工业和信息化部网站备案系统查询社交网络推广方法有哪些
  • 溧阳网站建设价格短视频运营方案策划书
  • 刘涛现在哪个网站做直播一键优化大师下载
  • wordpress主题kaliumseo技术顾问
  • wordpress 加跳板关键词seo优化排名公司
  • 小学生做网站电脑优化软件哪个好用
  • 柳州网站建设哪家公司好seo教程优化
  • wordpress 站群系统企业网络营销推广方案
  • 个人网站做团购百度推广一年要多少钱
  • 网站被挂广告怎么办搜索引擎seo优化
  • 国际公司和全球公司长沙建站优化
  • 商务网站建设推广普通话图片
  • 网站301重定向代码新东方英语线下培训学校
  • gom传奇网站建设怎么创建自己的免费网址
  • 网站建设预付款如何付bing搜索引擎下载
  • 微信定制网站建设俄罗斯搜索引擎yandex推广入口