fork创建进程的步骤___Spring-boot-Starter启动器和其加载的过程___redis怎么监视正在执行的命令

fork创建进程的步骤

我们都知道,在Linux中调用fork()函数,会创建一个子进程,那么在创建这个子进程的过程中,发生了些什么事情?

首先,我们要知道,fork()函数其实是调用发起_fork()系统调用,控制权由用户态转为内核态,

内核会分配新的内存块和内核数据结构给子进程(也就是PCB task_struct结构体),

然后内核会将父进程的部分数据内容以二进制形式拷贝到子进程,

下来再将所谓的子进程PCB加入到管理链表中(操作系统管理进程就是将程序用PCB描述,用链式结构进行管理),

然后从内核态返回用户态(父进程fork返回进程pid,子进程返回0),

后开始调度器调度。

但是我们要注意一点,fork之前父进程独立执行,fork之后父子进程分别执行自己的执行流,但是谁先执行由调度器调度。

这里还有一点需要注意,当子进程刚被创建出来,父子进程不再写入的时候,父子进程是数据共享一份,代码独有,但是当有任意一方试图写入数据的时候,便已写时拷贝的方式各自拥有一份数据

这就是所谓的写时拷贝。

当然当然,fork()也有可能调用失败,fork()调用失败的理由也就这两种?

系统中有太多的进程,资源不够

实际用户的进程超过了限制

Spring-boot-Starter

Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,可以一站式集成 Spring
和其他技术,而不需要到处找示例代码和依赖包。Spring Boot Starter的工作原理是:Spring Boot
在启动时扫描项目所依赖的JAR包,寻找包含spring.factories文件的JAR包,根据spring.factories配置加载AutoConfigure类,根据
@Conditional注解的条件,进行自动配置并将Bean注入Spring Context

redis怎么监视正在执行的命令

双击redis-monitor.bat,就会看到监控窗口跑起来了

连接查询和子查询那个效率更高

连接查询和子查询哪个效率高呢?
​ 首先两者不存在谁优于谁的说法,只是那种更适应某种环境。一般要看你是什么用途,如果数据量少的话可以子查询,或者经常用的数据就使用子查询,不经常用的就连接查询,适习惯而定,当然是指数据量少的情况下。

一般来讲连接查询效率更高,因为子查询会多次遍历数据,而连接查询只遍历一次,但是如果数据量较少的话子查询更加容易控制。但如果数据量大的话两者的区别就会很明显,对于数据量多的肯定是用连接查询快些,原因:因为子查询会多次遍历所有的数据(视你的子查询的层次而定),如果你的子查询是在无限套娃,且每张表数据量不大,使用子查询效率高。

​ 连接查询只会遍历一次, 但是数据量少的话也就无所谓是连接查询还是子查询,多表数据量大建议采用连接查询。

注:连接查询是SQL查询的核心,连接查询的连接类型选择依据实际需求。如果选择不当,非但不能提高查询效率,反而会带来一些逻辑错误或者性能低下。下面总结一下两表连接查询选择方式的依据:

1、 查两表关联列相等的数据用内连接。

2、 左表是右表的子集时用右外连接。

3、 右表是左表的子集时用左外连接。

4、 左表和右表彼此有交集但彼此互不为子集时候用全外连接(全连接)。

5、 求差操作的时候用联合查询。

Original: https://www.cnblogs.com/henuliulei/p/16543956.html
Author: 你的雷哥
Title: fork创建进程的步骤Spring-boot-Starter启动器和其加载的过程redis怎么监视正在执行的命令

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/529018/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球