2022.07.26面试

1.如何避免多线程中的资源竞争(线程同步)

Linux环境下:
1)互斥体
2)信号量
3)条件变量
4) 读写锁

windows环境下:
1)WaitForSingleObject与WaitForMultipleObjects函数
2)临界区
3) Event 事件
4)Mutex
5)信号量
6)读写锁
7) 条件变量

2.Linux中最大的文件句柄是多少,如何修改

1.发现文件打开太多,句柄数不够用了,需要调优linux参数,首先查看下系统的句柄是多少,用ulimit -a 命令查看

在这里插入图片描述

2.修改文件句柄的个数
1)用户级修改临时生效方法:(重启后失效)
ulimit -SHn 10000
ulimit 命令分软限制和硬限制,加-H就是硬限制,加-S就是软限制。默认显示的是软限制,如果运行ulimit 命令修改时没有加上-H或-S,就是两个参数一起改变。硬限制就是实际的限制,而软限制是警告限制,它只会给出警告。

2)用户级修改永久有效方式
vi /etc/security/limits.conf
修改配置文件/etc/security/limits.conf,加入:

* soft nofile 65535
* hard nofile 65535
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
* 表示所用的用户,但有的系统不认, 需要具体的用户名, 比如:
root soft nofile 65535
root hard nofile 65535

3)系统级修改临时生效方式
echo 655350 >/proc/sys/fs/file-max

4)系统级修改永久生效方式
vi /etc/sysctl.conf加入

fs.file-max=655350

3.进程和线程的区别,什么时候使用线程,什么时候使用线程

参考:https://blog.csdn.net/qq_19004627/article/details/79804562

进程——资源分配的最小单位,进程是指在系统中正在运行的一个应用程序;程序一旦运行就是进程
线程——程序执行的最小单位,线程是进程的一个实体,是进程的一条执行路径

线程进程的区别体现在几个方面:
1)进程拥有独立的堆栈空间和数据段,所以每当启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这对于多进程来说十分“奢侈”,系统开销比较大,而线程不一样,线程拥有独立的堆栈空间,但是共享数据段,它们彼此之间使用相同的地址空间,共享大部分数据,比进程更节俭,开销比较小,切换速度也比进程快,效率高,但是正由于进程之间独立的特点,使得进程安全性比较高,也因为进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。一个线程死掉就等于整个进程死掉。
2)体现在通信机制上面,正因为进程之间互不干扰,相互独立,进程的通信机制相对很复杂,譬如管道,信号,消息队列,共享内存,套接字等通信机制,而线程由于共享数据段所以通信机制很方便
3)属于同一个进程的所有线程共享该进程的所有资源,包括文件描述符。而不同过的进程相互独立。
4)线程又称为轻量级进程,进程有进程控制块,线程有线程控制块;
5)线程必定也只能属于一个进程,而进程可以拥有多个线程而且至少拥有一个线程;

何时用线程,何时用线程?

1)需要频繁创建销毁的优先使用线程;因为对进程来说创建和销毁一个进程代价是很大的。
2)线程的切换速度快,所以在需要大量计算,切换频繁时用线程,还有耗时的操作使用线程可提高应用程序的响应
3)因为对CPU系统的效率使用上线程更占优,所以可能要发展到多机分布的用进程,多核分布用线程;
4)并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求;
5)需要更稳定安全时,适合选择进程;需要速度时,选择线程更好。

4.top命令中的load average是啥含义

系统负载(System Load)是系统CPU繁忙程度的度量,即有多少进程在等待被CPU调度(进程等待队列的长度)。平均负载(Load Average)是一段时间内系统的平均负载,这个一段时间一般取1分钟、5分钟、15分钟。
以下两篇博文已经讲解的很详细了。
参考:
1.https://blog.csdn.net/zhangchenglikecc/article/details/52103737
2.https://blog.csdn.net/xiao_yi_xiao/article/details/121673658

5.什么是软硬连接

1)什么是链接:
链接简单说实际上是一种文件共享的方式,是 POSIX 中的概念,主流文件系统都支持链接文件。

2)主要用来做什么:
你可以将链接简单地理解为 Windows 中常见的快捷方式(或是 OS X 中的替身),Linux 中常用它来解决一些库版本的问题,通常也会将一些目录层次较深的文件链接到一个更易访问的目录中。在这些用途上,我们通常会使用到软链接(也称符号链接)
也就是说,为解决文件的共享使用,Linux系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即soft link或symbolic link)

链接为Linux系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。若一个inode号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名。

在这里插入图片描述

在这里插入图片描述

● 硬链接: 与普通文件没什么不同,inode 都指向同一个文件在硬盘中的区块
● 软链接: 保存了其代表的文件的绝对路径,是另外一种文件,在硬盘上有独立的区块,访问时替换自身路径。

硬链接是通过索引节点进行的链接。在Linux中,多个文件指向同一个索引节点是允许的,像这样的链接就是硬链接。硬链接只能在同一文件系统中的文件之间进行链接,不能对目录进行创建。如果删除硬链接对应的源文件,则硬链接文件仍然存在,而且保存了原有的内容,这样可以起到防止因为误操作而错误删除文件的作用。由于硬链接是有着相同 inode 号仅文件名不同的文件,因此,删除一个硬链接文件并不影响其他有相同 inode 号的文件。
硬链接可由命令 link 或 ln 创建,如:
link oldfile newfile
ln oldfile newfile

软链接(也叫符号链接)与硬链接不同,文件用户数据块中存放的内容是另一文件的路径名的指向。软链接就是一个普通文件,只是数据块内容有点特殊。软链接可对文件或目录创建。
软链接主要应用于以下两个方面:一是方便管理,例如可以把一个复杂路径下的文件链接到一个简单路径下方便用户访问;另一方面就是解决文件系统磁盘空间不足的情况
。例如某个文件文件系统空间已经用完了,但是现在必须在该文件系统下创建一个新的目录并存储大量的文件,那么可以把另一个剩余空间较多的文件系统中的目录链接到该文件系统中,这样就可以很好的解决空间不足问题。删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接就变成了死链接。
使用-s选项的ln命令即可创建符号链接,命令如下:
ln -s old.file soft.link
ln -s old.dir soft.link.dir

参考:
1.https://www.cnblogs.com/fqnb001/p/8778790.html
2.https://www.toutiao.com/article/6679352072095138317/
3.https://www.linuxprobe.com/soft-hard-links-comments.html(这个讲解的清楚点)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值