xhprof不维护了,用的是另一个,格式和xhprof一样,还兼容swoole 协程。
---------------------------------------------------------------阅读全文
centos下判断是否开启ipv6及关闭ipv6的方式
已有 392 次阅读  2012-01-31 17:14   标签:  ipv6

      linux默认是开启ipv6的,但是很多网络服务还不支持ipv6,开启了ipv6反而会影响服务器的网络性能。可以考虑关闭ipv6功能
在Linux下首先确认IPv6是否已经被启用,可以从三个方面确定。

1.使用ifconfig查看自己的IP地址是否含有IPv6地址。
eth0 Link encap:Ethernet HWaddr 00:0A:E4:FE:6F:E1
inet addr:172.28.245.104 Bcast:172.28.245.127 Mask:255.255.255.128
inet6 addr: fe80::20a:e4ff:fefe:6fe1/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:96998 errors:0 dropped:0 overruns:0 frame:0
TX packets:69963 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:113588678 (108.3 MiB) TX bytes:8894978 (8.4 MiB)
Interrupt:20

2.查看服务监听的IP中是否有IPv6格式的地址。(netstat -tuln)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
udp 0 0 172.28.245.104:61440 0.0.0.0:*
udp 0 0 0.0.0.0:32823 0.0.0.0:*
udp 0 0 0.0.0.0:32824 0.0.0.0:*
udp 0 0 0.0.0.0:68 0.0.0.0:*

3.使用lsmod|grep  ipv6查看ipv6的模块是否被加载。
ipv6 245989 12

关闭IPV6的方式:
当确定IPv6已经开启后就可以按照下面的方法将其关闭
1.使用vi编辑器,打开/etc/modprobe.conf
2.在文档中加入如下的两条:
alias net-pf-10 off
alias ipv6 off
保存退出,并且重新启动系统。
重启之后可以使用上面的三种方法去验证IPv6支持是否已经被关闭。

IPv6是默认支持的,所以当你要重新开起IPv6支持时,将/etc/modprobe.conf中的两条指令注释掉就可以了。
======================================================================

http://www.111cn.net/sys/CentOS/50864.htm



http://www.linuxso.com/linuxrumen/17201.html

http://blog.csdn.net/suplxj/article/details/7773423

方法一:

CentOS 6 默认安装后,IPv6是自动开启的,但是现在IPv6还没有普及基本用不到这个功能,建议关闭IPv6模块。下面介绍一下关闭方法。

说明:蓝色=命令名称

      浅绿=命令参数

      浅蓝=选项

      紫色=目录

      系统环境:CentOS  6.2  i686

1、查看系统是否开启ipv6

a)通过网卡属性查看

命令:ifconfig

注释:有 “inet6 addr:。。。。。。。“ 的表示开启了ipv6功能

b)通过内核模块加载信息查看

命令:lsmod | grep ipv6

2、ipv6关闭方法

在/etc/modprobe.d/dist.conf结尾添加

alias net-pf-10 off
alias ipv6 off
可用vi等编辑器,也可以通过命令:
cat <<EOF>>/etc/modprobe.d/dist.conf
alias net-pf-10 off
alias ipv6 off
EOF

写改完毕重启电脑。

来自:http://www.cnblogs.com/taosim/articles/3152516.html
Jquery: <script src="./scripts/jquery-1.4.2.js"></script>
Html textarea:


javasciprt,先批量替换掉下划线为点号,再正则匹配出所有包含IP行里的IP,如下:


输入素材:

  elk_logstash_bj_yz_10_73_211_106
  elk_logstash_bj_yz_10_73_211_118
  elk_logstash_bj_yz_10_73_211_119


输出素材:
10.73.211.106
10.73.211.118
10.73.211.119

Jquery写法,加上IP去重:
Html触发部分:
<a href="javascript:void(0);" id=analysisIps name=analysisIps>[提取Ip地址]</a>


jackXiang@jackXsMacBook-Pro  ~/ops   master ●  brew cask install rdm
Updating Homebrew...
Error: Cask 'rdm' is unavailable: No Cask with this name exists. Did you mean one of these?
avibrazil-rdm                         keyboard-maestro                      safeincloud-password-manager          wordmark
avibrazil-rdm                         keyboard-maestro                      safeincloud-password-manager          wordmark
keeper-password-manager               orelord-mongodb                       watchguard-mobile-vpn-with-ssl
keeper-password-manager               orelord-mongodb                       watchguard-mobile-vpn-with-ssl

可以在这里下载dmg:
链接:https://pan.baidu.com/s/1IPAgiaEByU0zA8fIov930w 密码:4pwi
安装之后的节目,输入连接名,地址,以及端口号就行了,点击下面的test connection测试连接

来自:https://blog.csdn.net/qq_41140741/article/details/86593955
现象:bogon:tmp root# mkdir -p /home/xiangdong    
mkdir: /home/xiangdong: Operation not supported

目的:fFileZilla SFTP同步Linux上的家目录到Mac上。

解决办法:
sudo vim /etc/auto_master
/home                   auto_home       -nobrowse,hidefromfinder #加上#号
bogon:tmp root# sudo automount
bogon:tmp root# mkdir -p /home/xiangdong      #重启automount后就能成功创建。


Hmmm, trying to create a directory under '/home' on a Mac?

Well, Apple doesn't want you to (with good reason, automounter owns this dir, which makes it easier to do NFS mounts and such) so you shouldn't muck with it but if you really just 'have to do it', here is how you can.

Basically: Edit /etc/auto_master and remove or comment out the line that starts with "/home".

example:
sudo vim /etc/auto_master

before:

# Automounter master map
+auto_master            # Use directory service
/net                    -hosts          -nobrowse,hidefromfinder,nosuid
/home                   auto_home       -nobrowse,hidefromfinder
/Network/Servers        -fstab
/-                      -static
after:

# Automounter master map
+auto_master            # Use directory service
/net                    -hosts          -nobrowse,hidefromfinder,nosuid
#/home                   auto_home       -nobrowse,hidefromfinder
/Network/Servers        -fstab
/-                      -static
to have the change take effect without a reboot:
sudo automount

mkdir /home/test
ls -l /home/
total 0
drwxr-xr-x 3 root admin 102 Aug 10 11:33 test

NOTE: I wouldn't do anything 'important' with this directory as it's easy to forget you altered this and an upgrade will plow over this directory, removing all data. (this dir is also not included in any Time Machine backups.


来自:https://blog.csdn.net/lychao89/article/details/53667068
背景:Inode在Mac下锁屏时间长后,网络断开了,如果中午吃饭后,再回来,就断开了,出现:
2019-02-22 09:36:26 Connecting to the network...
2019-02-22 09:36:31 Beginning authentication... [xiangdong]
2019-02-22 09:36:36 You have passed the identity authentication
2019-02-22 09:36:37 Obtaining IP address...
2019-02-22 09:36:44 Current IP address is  172.20.232.65
2019-02-22 09:36:49 Start security check session...
2019-02-22 09:36:49 Security check is passed.
2019-02-22 13:00:37 Disconnecting from the network...
2019-02-22 13:00:38 disconnect for time limit
2019-02-22 13:00:43 Connection failed.

------------------------------------------------------------------------------------------------------------------
在使用TeamViewer时,mac会自动休眠导致网络断开链接无法远程的问题。
尝试了一些方法,以下方法效果显著,特此记录。

第一步:

要设定锁定输入密码的设置,进入‘系统偏好设置’‘安全性与隐私’,将选项‘进入睡眠或开始屏幕保护程序后’打勾,选‘立即’。

第二步:

到‘launchpad’中的‘其他’文件夹打开‘Automator’,或者直接到spotlight中输入定位过去(就是拿火箭筒的小机器人)


第三步:

接下来,会弹出一个窗口,选‘新建文稿’,在弹出窗口中的‘文稿类型’选择‘服务’。


第四步:

首先可以到搜索框中输‘屏幕’,所有和屏幕有关的项目就都出来了,包括我想要的‘启动屏幕保护程序’,选中拖动到右面的框里,记住,要把“‘服务’收到”这项改为‘没有输入’,然后到菜单‘文件’中选择‘存储’,输个服务的名称,比如‘屏保’。


第五步:

到‘系统偏好设置’‘键盘’‘快捷键’‘服务’ 中,找到刚刚那个服务‘屏保’,添加快捷键,最好不要和其他的冲突 。


参考地址:http://blog.csdn.net/wo2niliye/article/details/52440012
原文:https://blog.csdn.net/zww1984774346/article/details/79303563
YUM出现问题:
  File "/usr/lib/python2.7/site-packages/urlgrabber/grabber.py", line 1723, in _do_grab
    self._do_perform()
  File "/usr/lib/python2.7/site-packages/urlgrabber/grabber.py", line 1517, in _do_perform
    raise KeyboardInterrupt
KeyboardInterrupt

阅读全文
实践发现:苹果自带了,到8,9,得自己在键盘快捷键上面勾选。AddTime:2022-08-19 10:10

Mac系统可以新建多个桌面,我习惯开三个桌面,第一个桌面放浏览器、QQ等娱乐窗口,第二个窗口开Xcode等编程工具(不编程用Mac干啥,是吧),第三个窗口放一些笔记啊,工具什么的。

一般切换的时候,可能都知道Ctrl+ 左右方向键来切换,如果开多个桌面的话,就得连续切过来,当然,还可以打开MIssion Control来切换,可是都有点麻烦。

其实Mac可以直接用Ctrl + 数字来切换桌面的,步骤如下:
https://blog.csdn.net/win_ann/article/details/37579871

1.首先你要有多个桌面(好像是废话)。

2.打开系统偏好设置- 键盘- Mission Control(如图所示)
点击在新窗口中浏览此图片


3.有多个桌面就会出现最下面的快捷键,勾上就可以了



这样,就可以用Ctrl+ 数字键快速切换桌面了(快捷键个数随着桌面的个数增加)

来自:https://www.cnblogs.com/Formulate0303/p/15905686.html
主要还是放下面,放右边出现程序多后,高度不够出现左右轮显:
1)选择哪些图标显示在任务栏上.
2)打开或关闭系统图标。

=======================================
方法一:在任务栏上设置调整
1.在任务栏空白处右击鼠标键,选择点击最下方的“设置”按钮;

Win10任务栏怎么调整位置 怎么调整Win10任务栏
2.这时我们会看到任务栏选项中的“任务栏在屏幕上的位置”字样,点击方框右端的下拉按钮;

Win10任务栏怎么调整位置 怎么调整Win10任务栏
3.会有“靠左、顶部、靠右、底部”这四个选项(本经验以靠右为例),选择点击其中“靠右”按钮;

Win10任务栏怎么调整位置 怎么调整Win10任务栏
4.会发现Win10任务栏调整到右侧了,同理还可以靠左、顶部。

Win10任务栏怎么调整位置 怎么调整Win10任务栏
END

方法二:拖动任务栏来进行调整
1.也是在任务栏空白处右击鼠标键,选择点击“锁定任务栏”按钮;

Win10任务栏怎么调整位置 怎么调整Win10任务栏
2.当我们在空白处再次右击鼠标键时,会发现“锁定任务栏”前面的对号消失了,这说明了任务栏已解除锁定;

Win10任务栏怎么调整位置 怎么调整Win10任务栏
3.我们尝试这把任务栏向屏幕顶端拖动时,会发现任务栏跑到顶端去了,也可以向右向左拖动来实现对任务栏的调整。

来自:https://jingyan.baidu.com/article/3f16e00309a9492591c10312.html
右键点击系统桌面左下角的【开始】,在开始的右键菜单中点击【设置】;
在Windows 设置窗口中,我们点击:时间和语言;
在时间和语言设置窗口中,我们先点击窗口左侧的区域和语言(新版分开的:区域、语言,点语言这项),在对应的右侧窗口首选的语言下面有一项目叫:A字 中文(中华人民共和国);中点它,它下面会显示新的一点文字叫选项,进入新选项卡左侧有一个键盘,键盘下面有系统默认的,也有QQ五笔,删除掉Win10默认输入法即可。

参考自:https://jingyan.baidu.com/article/4e5b3e1905a8c391901e24f0.html


尝试过将英语设为默认语言并删除中文语言,以及将中文设置为默认并删除英文,此输入法依然存在。
请问有什么办法可以将这个输入法删除么?(哪怕只是在语言栏中不显示此输入法)

win+R后输入regedit,尝试定位到下面位置:
HKEY_CURRENT_USER\Keyboard Layout\preload

选中该位置,右侧除默认外会有3个项目,先确定一下三个项目的数据。804的那个是系统自带的中文输入法,409的为英文键盘。其他具体数据的项可以尝试删除掉,之后强制结束并重新启动Windows资源管理器进程,看下显示效果。

由于涉及注册表修改,建议您先右键该位置选择导出进行备份,再进行操作。

实际看到是两具:804 ,没有409. 失败了。还在!



强制结束并重新启动Windows资源管理器进程:
方法一
1. 首先打开电脑,进入桌面,按键盘上的“Ctrl Shift Esc”组合键,调出任务管理器窗口。

2. 在打开的任务管理器窗口中,上方切换到进程选项下,找到“windows资源管理器”选项,右键。

3. 在打开的菜单中,选择【重新启动】,即可重启资源管理器。

注意:若我们这里点击【重新启动】,系统没有反应,则尝试方法二。

方法二
1. 同样的方法打开任务管理器窗口,上方切换到【详细信息】选项下。

2. 在打开的列表中,找到“explorer.exe”进程,选中后,点击右下角的【结束任务】按钮。
注意:请先不要点击,看完所有步骤后,再点击。因为点击【结束任务】后,系统就会黑屏了。

3. 接下来,依次点击任务管理器左上角的【文件】---【运行新任务】选项。

4. 在打开的窗口中,输入“explorer”,点击【确定】或回车,就可以重新打开资源管理器了。
一)卸载APP:
输入下面的命令回车,PS会列出系统中所有已安装应用列表。
Get-AppxPackage -AllUsers
从列表中找到你要卸载的应用,并找到其全名称,即PackageFullName。如果你觉得太长,可以把结果复制到记事本中查找关键字。

Version                : 10.1811.3343.0
PackageFullName        : Microsoft.People_10.1811.3343.0_x64__8wekyb3d8bbwe
InstallLocation        : C:\Program Files\WindowsApps\Microsoft.People_10.1811.3343.0_x64__8wekyb3d8bbwe

卸载上面的人脉APP:
Remove-AppxPackage Microsoft.People_10.1811.3343.0_x64__8wekyb3d8bbwe


二)不在桌面右下方上显示人脉图标,从任务栏的右键上去掉:
gpedit.msc  =》“用户配置/管理模板/开始菜单和任务栏”菜单项。
在右侧的窗口中看到一个“从任务栏中删除人脉栏”的设置项。
双击该菜单项,在打开的编辑属性窗口中,我们选择已启用设置项。

三)简单从任务栏去掉:
在Windows10桌面,右键点击任务栏的空白位置,在弹出的右键菜单中,可以看到一个显示人脉按钮的菜单项,有时候会不小心点击到该菜单项,我们可以直接把其从右键菜单中删除掉。
来自:https://jingyan.baidu.com/article/36d6ed1f8cef501bcf4883ad.html
WPS热点怎么彻底关掉,电脑是否每次开启都闪烁着“wps热点”这家伙,咱们主要说下将它彻底给消除了的办法,
打开开始菜单后,直接输入:配置工具,高级-》其它选项,参考自:
https://jingyan.baidu.com/article/0f5fb0993e721f6d8334eabe.html
实践出现开机问题:CentOS7.4开机出现welcome to emergency mode
解决办法:
我是修改了VirtualBox的启动顺序,把光盘,软驱给去掉勾选就好了。
这还不够,那个Virtualbox中的虚拟介质管理里当时挂的ISO的系统盘也得删除掉。否则还是会报错的!!参考:
https://www.cnblogs.com/mawanglin2008/articles/3650552.html


个人认为是用CentOS的网上下载的ISO所导致后来出现挂载上的问题。
也就是直接干掉勾选光驱这一项只留下磁盘这一人也就好了,有的还会报:
get "ip_local_port_range: prefer different parity for start/end values" message every time we boot the system
cat /proc/sys/net/ipv4/ip_local_port_range
1024    65535
可以看到,现在定义的范围是32768-61000.

如果想修改这个范围,可以使用sysctl工具,sysctl的配置文件位于/etc/sysctl.conf 。
From:https://www.cnblogs.com/solohac/p/4154180.html
——————————————————————————————————

CentOS7.4开机出现welcome to emergency mode,报这个错误多数情况下是因为/etc/fstab文件的错误。注意一下是不是加载了外部硬盘、存储器或者是网络共享空间,在重启时没有加载上导致的。
今天使用虚拟机做实验,在系统安装完成后,优化一些选项后,就操作了挂载ISO镜像文件,系统启动后如下报错
我试想应该是挂载引起的,而且原来系统正常启动后是进入的图形界面。

果然,我通过mount /dev/cdrom/ /mnt/cdrom挂载完成后,在/etc/fstab中写入有问题,小失误就将系统搞成这样子,可以输入密码,然后进入

写入的挂载文件有问题,开机启动出现问题。
先删除这个挂载,然后重启系统,系统启动正常。
建议大家在给重要的配置文件做改动时候,先备份,如果出现问题,可以进入救援模式然后恢复原来的配置。

主要操作如下:
第一、根据提示输入root密码后登陆救援模式
第二、检查磁盘挂载信息
第三、注释掉自己增加的内容,如果确定不在使用可以删除
第四、重启OK。


来自:https://www.jb51.net/article/146928.htm
背景:去服务关,关不了,用这个可以。Win10啥都管,简直就是垃圾,不用不行。
1、打开运行,快捷键【win+R】,输入【 gpedit.msc】,点击确定



2、在打开的组策略窗口中,依次展开计算机配置>管理模板>Windows组件,选择【windows组件】中的windows Defender 防病毒程序



3、在windows Defender设置里面双击打开【关闭windows Defender 防病毒程序】,选择【已启用】,然后单击应用

来自:https://zhidao.baidu.com/question/1050100438731397459.html
问题:rm -rf /data/www/*
rm: cannot remove ‘/data/www/yum.boosh.com.cn/centos/5/x86_64/rsyslog_v8/RPMS’: Directory not empty

办法:
在linux系统中,我们有时候删除文件夹的时候,提示rm: cannot remove `dir-name’: Directory not empty,或者文件夹非空,即使使用sudo也无法删除,那是因为系统存在使用或者执行文件夹中可执行程序,我们只需要执行命令:

lsof dir-name/.fuse_hidden000bd8c100000*

which lsof
/usr/sbin/lsof

rpm -qf /usr/sbin/lsof
lsof-4.82-5.el6.x86_64

找到那些程序在使用文件夹中的文件,

然后使用

kill 命令结束进程,如:kill 2739

然后就可以删除文件夹了。

From:https://blog.csdn.net/u014001964/article/details/82291064
一)nginx的引入epoll后惊群处理:
accept() 和 epoll_wait() 调用,还存在一个惊群的问题。换句话说,当网络 I/O 事件发生时,多个进程被同时唤醒,但实际上只有一个进程来响应这个事件,其他被唤醒的进程都会重新休眠。

其中,accept() 的惊群问题,已经在 Linux 2.6 中解决了;
而 epoll 的问题,到了 Linux 4.5 ,才通过 EPOLLEXCLUSIVE 解决。
为了避免惊群问题, Nginx 在每个 worker 进程中,都增加一个了全局锁(accept_mutex)。这些 worker 进程需要首先竞争到锁,只有竞争到锁的进程,才会加入到 epoll 中,这样就确保只有一个 worker 子进程被唤醒。

简单点说:Apache动辄就会启动成百上千的进程,如果发生惊群问题的话,影响相对较大;但是对Nginx而言,一般来说,worker_processes会设置成CPU个数,所以最多也就几十个,即便发生惊群问题的话,影响相对也较小。
另:高版本的Linux中,accept不存在惊群问题,不过epoll_wait等操作还有。

  假设你养了一百只小鸡,现在你有一粒粮食,那么有两种喂食方法:
你把这粒粮食直接扔到小鸡中间,一百只小鸡一起上来抢,最终只有一只小鸡能得手,其它九十九只小鸡只能铩羽而归。这就相当于关闭了accept_mutex。
你主动抓一只小鸡过来,把这粒粮食塞到它嘴里,其它九十九只小鸡对此浑然不知,该睡觉睡觉。这就相当于激活了accept_mutex。
  可以看到此场景下,激活accept_mutex相对更好一些,让我们修改一下问题的场景,我不再只有一粒粮食,而是一盆粮食,怎么办?
此时如果仍然采用主动抓小鸡过来塞粮食的做法就太低效了,一盆粮食不知何年何月才能喂完,大家可以设想一下几十只小鸡排队等着喂食时那种翘首以盼的情景。此时更好的方法是把这盆粮食直接撒到小鸡中间,让它们自己去抢,虽然这可能会造成一定程度的混乱,但是整体的效率无疑大大增强了。
  Nginx缺省激活了accept_mutex(最新版缺省禁用),是一种保守的选择。如果关闭了它,可能会引起一定程度的惊群问题,表现为上下文切换增多(sar -w)或者负载上升,但是如果你的网站访问量比较大,为了系统的吞吐量,我还是建议大家关闭它。

链接:https://www.jianshu.com/p/129dd4320ae1

二)边缘触发和水平触发主要体现在边缘触发程序复杂还是系统承担这个复杂而用水平触发,边缘触发只通知一次,增加程序处理难度和各种异常处理:
第一种,使用非阻塞 I/O 和水平触发通知,比如使用 select 或者 poll。

根据刚才水平触发的原理,select 和 poll 需要从文件描述符列表中,找出哪些可以执行 I/O ,然后进行真正的网络 I/O 读写。由于 I/O 是非阻塞的,一个线程中就可以同时监控一批套接字的文件描述符,这样就达到了单线程处理多请求的目的。

所以,这种方式的最大优点,是对应用程序比较友好,它的 API 非常简单。

但是,应用软件使用 select 和 poll 时,需要对这些文件描述符列表进行轮询,这样,请求数多的时候就会比较耗时。并且,select 和 poll 还有一些其他的限制。

select 使用固定长度的位相量,表示文件描述符的集合,因此会有最大描述符数量的限制。比如,在 32 位系统中,默认限制是 1024。并且,在 select 内部,检查套接字状态是用轮询的方法,再加上应用软件使用时的轮询,就变成了一个 O(n^2) 的关系。

而 poll 改进了 select 的表示方法,换成了一个没有固定长度的数组,这样就没有了最大描述符数量的限制(当然还会受到系统文件描述符限制)。但应用程序在使用 poll 时,同样需要对文件描述符列表进行轮询,这样,处理耗时跟描述符数量就是 O(N) 的关系。

除此之外,应用程序每次调用 select 和 poll 时,还需要把文件描述符的集合,从用户空间传入内核空间,由内核修改后,再传出到用户空间中。这一来一回的内核空间与用户空间切换,也增加了处理成本。

有没有什么更好的方式来处理呢?答案自然是肯定的。

第二种,使用非阻塞 I/O 和边缘触发通知,比如 epoll。

既然 select 和 poll 有那么多的问题,就需要继续对其进行优化,而 epoll 就很好地解决了这些问题。

epoll 使用红黑树,在内核中管理文件描述符的集合,这样,就不需要应用程序在每次操作时都传入、传出这个集合。
epoll 使用事件驱动的机制,只关注有 I/O 事件发生的文件描述符,不需要轮询扫描整个集合。
不过要注意,epoll 是在 Linux 2.6 中才新增的功能(2.4 虽然也有,但功能不完善)。由于边缘触发只在文件描述符可读或可写事件发生时才通知,那么应用程序就需要尽可能多地执行 I/O,并要处理更多的异常事件。

第三种,使用异步 I/O(Asynchronous I/O,简称为 AIO)。在前面文件系统原理的内容中,我曾介绍过异步 I/O 与同步 I/O 的区别。异步 I/O 允许应用程序同时发起很多 I/O 操作,而不用等待这些操作完成。而在 I/O 完成后,系统会用事件通知(比如信号或者回调函数)的方式,告诉应用程序。这时,应用程序才会去查询 I/O 操作的结果。

异步 I/O 也是到了 Linux 2.6 才支持的功能,并且在很长时间里都处于不完善的状态,比如 glibc 提供的异步 I/O 库,就一直被社区诟病。同时,由于异步 I/O 跟我们的直观逻辑不太一样,想要使用的话,一定要小心设计,其使用难度比较高。

工作模型优化

了解了 I/O 模型后,请求处理的优化就比较直观了。使用 I/O 多路复用后,就可以在一个进程或线程中处理多个请求,其中,又有下面两种不同的工作模型。

第一种,主进程 + 多个 worker 子进程,这也是最常用的一种模型。这种方法的一个通用工作模式就是:

主进程执行 bind() + listen() 后,创建多个子进程;
然后,在每个子进程中,都通过 accept() 或 epoll_wait() ,来处理相同的套接字。
比如,最常用的反向代理服务器 Nginx 就是这么工作的。它也是由主进程和多个 worker 进程组成。主进程主要用来初始化套接字,并管理子进程的生命周期;而 worker 进程,则负责实际的请求处理。我画了一张图来表示这个关系。
分页: 13/272 第一页 上页 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 下页 最后页 [ 显示模式: 摘要 | 列表 ]