《PHP》PHP7性能提升之后的思考
时下不少人拿PHP7的高性能与HHVM来做比较,那么问题来了:随着PHP7性能的提升,我们能预测出未来PHP这门语言会用PHP写出来么?最经典的实例就是PyPy,这是一个用RPython(Python的一个子集)写出来的Python解释器和实时编译器。本文由PHP100中文网编译,转载请看文末的转载要求,谢谢合作!
时下不少人拿PHP7的高性能与HHVM来做比较,那么问题来了:随着PHP7性能的提升,我们能预测出未来PHP这门语言会用PHP写出来么?
Mattsah的观点:
对解释型语言来说,有用语言本身来重写这门语言的其他实例么?我认为即使有这样的实例,在这个环境下,这门语言的某些部分必定是不可用的。
Otterfan:
最经典的实例就是PyPy,这是一个用RPython(Python的一个子集)写出来的Python解释器和实时编译器。
Mattsah:
虽然对Python不是很熟悉,但我不得不考虑下(如有误欢迎更正),这样一来它的动态性能或者说某些特性是不是会受到限制?
Otterfan:
实际上并没有。它基本上能与Python 2.7.8和Python 3.2.5兼容,甚至它有时候比规范的Python(CPython)运行的还要快。
实际上的过程是这样的:Rpython通过PyPy的RPython工具链被翻译成C版本,然后这个C版本被编译为二进制机器码,接着用户层的Python就会运行在这个二进制机器码上。你当然也可以在规范的CPython解释器之上来运行PyPy解释器,不过这样子PyPy会运行的很慢。
PyPy同样也是一个实时编译器,这才是PyPy通常能产生出甚至比CPython还要快的代码的真正原因,代价只是启动的时候稍微有点延迟。PHP则不会有像Python Web开发的这个缺点,因为Python Web应用是一次性就全部启动并开始运行,而不是像PHP一样响应每个请求才开始逐步启动。
Chippiewall的观点:
你不可能在没有一个解释器来运行的前提下写出一个解释型语言的解释器。
Ircmaxell的评论:
这个观点严格意义上是不对的。
另外更正一点,PHP并不是一门解释型语言,而是一门编译型语言。
明白了这一点,就很不一样了。是的,编译器并不会产生出原生的机器码,但还是存在这么一个编译器的。并且虚拟机使用的每个单独的操作在理论上都会被产生的机器码所代替。看看Zend’s “JIT”编译器吧,它根本就不是一个实时编译器,而是一个AOT编译器。很准确地说,它能产生出原生的机器码而不是虚拟机代码(但有相同的语义)。
所以如果拿一个用PHP(Recki-CT或PHPPHP)写的编译器,我们是能够用它来编译自身的。这就意味着,只要我们引导它一次,我们就不再需要“编译器”(虚拟机)了。
所以,Chippiewall的观点是不对的。
=========公众号:春树镇
讨论研究:互联网技术,PHP开发,网站建设,web设计,小说,电影
8080端口被占用了怎么办?
8080端口被占用了怎么办
windows:
8080端口被占用的解决办法:
1、查看windows所有端口进程
点击开始菜单选择运行(win+r),接着在运行对话框中输入“cmd”,回车打开命令提示符窗口,然后在窗口中输入【netstat -ano】,回车,之后就会显示所有的端口占用情况。如下图中最喜欢的8080被占了。
2、在窗口中继续输入【netstat -aon|findstr \”端口\”】,这里的提示的端口为8080,那么就输入命令为【netstat -aon|findstr \”8080\”】,回车之后就可以看见列表中的PID。根据PID在电脑的任务管理器中查看对应的占用程序,然后将其关闭即可。
3、我么可以看到占有8080这个程序的进程ID:7172,继续输入命令【tasklist|findstr \”7172\”】,7172就是进程ID,现在知道是哪个进程占用的我们就可以采取相应措施进行解决了。
linux:
一、查看已知端口占用情况比如,我们想知道8080端口的使用情况,或者说被谁占用了,命令如下:netstat -anp | grep 8080结果如下:也可以使用命令:netstat -tln | grep 8080结果:和上个命令对比,少了“2597932/java”,这个显示的是进程号以及被哪个程序所占用。如果没有被占用,就什么都不显示。二、查看全部端口占用情况netstat -anp# 或者netstat -tln显示结果分别如下面:[root@Cent0S8-FTP sysconfig]# netstat -anpActive Internet connections (servers and established)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:44321 0.0.0.0:* LISTEN 1740/pmcd tcp 0 0 127.0.0.1:4330 0.0.0.0:* LISTEN 2715/pmlogger tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1191/sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1196/cupsd tcp 0 0 192.168.10.111:22 192.168.10.112:56798 ESTABLISHED 3209340/sshd: fangd tcp 0 0 192.168.10.111:22 192.168.10.112:58794 ESTABLISHED 3330163/sshd: fangd tcp 32 0 192.168.10.111:35222 8.43.85.13:443 CLOSE_WAIT 3876/gnome-shell tcp 0 52 192.168.10.111:22 192.168.10.112:56674 ESTABLISHED 3198229/sshd: fangd tcp6 0 0 ::1:44321 :::* LISTEN 1740/pmcd tcp6 0 0 ::1:4330 :::* LISTEN 2715/pmlogger tcp6 0 0 :::111 :::* LISTEN 1/systemd tcp6 0 0 :::21 :::* LISTEN 1430/vsftpd tcp6 0 0 :::22 :::* LISTEN 1191/sshd tcp6 0 0 ::1:631 :::* LISTEN 1196/cupsd udp 0 0 0.0.0.0:5353 0.0.0.0:* 982/avahi-daemon: r udp 0 0 192.168.10.111:46722 193.182.111.143:123 ESTABLISHED 985/chronyd udp 0 0 0.0.0.0:67 0.0.0.0:* 2632/dnsmasq udp 0 0 192.168.10.111:68 192.168.10.1:67 ESTABLISHED 1176/NetworkManager udp 0 0 0.0.0.0:111 0.0.0.0:* 1/systemd udp 0 0 0.0.0.0:45242 0.0.0.0:* 982/avahi-daemon: r udp 0 0 127.0.0.1:323 0.0.0.0:* 985/chronyd udp6 0 0 :::5353 :::* 982/avahi-daemon: r udp6 0 0 :::111 :::* 1/systemd udp6 0 0 ::1:323 :::* 985/chronyd udp6 0 0 :::41737 :::* 982/avahi-daemon: r raw6 0 0 :::58 :::* 7 1176/NetworkManager Active UNIX domain sockets (servers and established)Proto RefCnt Flags Type State I-Node PID/Program name Pathunix 2 [ ACC ] SEQPACKET LISTENING 24579 1/systemd /run/systemd/coredumpunix 2 [ ACC ] STREAM LISTENING 29959 967/lsmd /var/run/lsm/ipc/simc[root@Cent0S8-FTP sysconfig]# netstat -tlnActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.0.1:44321 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:4330 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN tcp6 0 0 ::1:44321 :::* LISTEN tcp6 0 0 ::1:4330 :::* LISTEN tcp6 0 0 :::111 :::* LISTEN tcp6 0 0 :::21 :::* LISTEN tcp6 0 0 :::22 :::* LISTEN tcp6 0 0 ::1:631 :::* LISTEN三、查看具体端口被哪个程序占用lsof -i :8080[root@Cent0S8-FTP sysconfig]# lsof -i :8080COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEjava 2597932 root 45u IPv6 27126054 0t0 TCP *:webcache (LISTEN)四、kill被占用的进程我们通过三中的命令得到PID对应的2597932,或者通过命令“netstat -anp | grep 8080”得到的“2597932/java”,这里的2597932都是端口占用的对应进程的进程号,我们杀掉对应进程号即可。kill -9 2597932五、检查对应端口是否还在占用在“四”中,我们kill了对应的进程,那么是否成功了呢,我们可以通过“一”中的命令再查看一下8080端口的使用情况。netstat -anp | grep 8080发现没有任何结果,这就说明已经kill掉了对应的进程。
以上就是8080端口被占用了怎么办的详细内容,更多请关注php中文网其它相关文章
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。