php怎么实现进程锁,如何自学Python?
其实所有的软件开发语言,学习的路线图基本差不多,都遵循一样的学习方法和规律。
如果你对python毫不了解,首先你得知道这个大蟒蛇是啥,要对python有个基础的认识,比如python是什么,有什么特点,和其他的开发语言有什么区别,还有就是python能干什么,有哪些发展方向等等。这些基础的认识可以帮助你搭建起python的整体知识框架。
然后开始学习python的语法、数据类型和编码规则等。这些知识在网上可以找到一大堆,当然也可以买一本关于python的书来系统的学习下。总体来说,相比起其他的语音,python的语法要简单很多,所以这块不用担心,一般人都能很快掌握。
之后就是最重要的,开始练习写python程序,和所有的软件语音一样,先写个“helloworld”。接下来深入练习的话,可以在网上找找“python 100例教程”,这种教程有很多,也都类似,找一个跟着教程多加练习就行,熟能生巧嘛。
经过大量练习后,你基本就对python很熟悉了,可以进行一般的python编程了。之后就要研究怎么进行实战了,如果你是工作上用到python,那样最好,可以在实际项目中锻炼和成长。如果只是个人爱好而自学的,可以研究下用python去做些实际的东西,下边介绍几个python的使用方向。
1 网络爬虫,使用python写爬虫还是很流行的,各种开源爬虫代码也很多,前期可以进行模仿,熟练后就可以写自己的爬虫代码,进行实际网站的数据收集了。
2 数据图形化 ,利用python强大的数学库和图像处理库,可以画出各种复杂的图形,有点matlab的意思,当然也可以进行图片处理,网上曾经有大神用python实现过ps的功能,你可以自己在网上找找例子。
3 小游戏开发,当你的python能力已经很强大了,可以自己尝试开发一些小游戏,比如曾经微信打飞机游戏等等,当玩着自己开发的游戏时,成就感一定爆棚。
总的来说,python入门还是比较简单的,但想要学好就得靠持续的努力了,现在python的发展还是很好的,所以一定要坚持。
定时执行如何判断之前的脚本是否跑完?
两种做法:
1、脚本执行时,看一下系统进程里,是不是上个脚本还在执行,如果还在执行,就不执行脚本。
2、脚本执行的时候,生成一个临时文件,内容随意,等到脚本执行结束后删除该文件。下次脚本执行的时候看一下这个临时文件是否存在,如果存在则说明上次执行还没有结束,脚本就终止执行。否则继续执行。
为什么php不适合做计算密集型业务?
PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域。
1.优点:开源 免费性 快捷性 [程序开发快,运行快,技术本身学习快]
1)跨平台,性能优越,跟Linux/Unix结合别跟Windows结合性能强45%,并且和很多免费的平台结合非常省钱,比如LAMP(Linux /Apache/Mysql/PHP)或者FAMP(FreeBSD/Apache/Mysql/PHP)结合,或者数据应用够大可以考虑换 PostgreSQL或者Oracle,支持N种数据库。(N >= 10)
2)语法简单,如果有学习C和Perl的很容易上手,并且跟ASP有部分类似。有成熟的开发工具,比如NuPHPed,或者Zend Studio等等,再Linux平台下可以使用Eclipse等等。
3)目前主流技术都支持,比如WebService、Ajax、XML等等,足够应用。
4)有比较完整的支持,比如使用ADODB或者PEAR::DB做数据库抽象层,用Smarty或者smart template做模板层,如果是PHP 5.1的话,还能够使用PDO(PHP Data Object)来访问数据库。
5)有很多成熟的框架,比如支持MVC的框架:phpMVC,支持类似ASP.net的事件驱动的框架:Prado,支持类似Ruby On Rails的快速开发的框架:Cake等等,足够满足你的应用需求。
6)PHP 5已经有成熟的面向对象体系,能够适应基本的面向对象要求。适合开发大型项目。
7)有成熟的社区来支持PHP的开发。
8)目前已经很多大型应用都是使用PHP,比如淘宝网、Yahoo、163、Sina等等大型门户,很多选用PHP来作为他们的开发语言,所以大型门户都能够选用它,我想足够能够你的使用了。
9)有很多开源的框架或开源的系统可以使用,比如比较知名的开源框架有Zend Framework、CakePHP、CodeIgniter、symfony等,开源论坛有Discuz!、Phpwind等,开源博客 WordPress,开源网店系统如Ecshop、ShopEx等,开源的SNS系统如UCHome、ThinkSNS等。
10)使用成本低 (linux apache mysql php内核)
2.缺点
1)函数命名不规范 驼峰法和下滑线,传参位置不一 你知道的
2)单线程 ; PHP本身,一直以来php就是个单进程的程序;虽然php的pthreads扩展早就有了。但是它不够稳定,运行运行着就会莫名其妙的自己挂掉;php的扩展都是C写的,这也就意味着任何一个扩展出现线程竞争资源控制问题都能让整个挂掉
3)核心异步网络不支持(当然在linux只有同步非阻塞网络模型)。却少了这个使得很难开发一个能够承受大并发的网络应用。传统的网络模型和io都阻塞的。这样基本的编程的做法就是一个进程(或者线程)响应一个用户链接请求。因此无法完成像实时网游那样需要成千上万网络连接的任务。尽管php也有Libevent、eio扩展对此算是某种程度上面的弥补,但是感觉都不是那么完善
4)只支持web开发,不方便做 .exe文件,不方便做桌面应用程序. 不方便做手机程序.
5)不适合做爬虫、自动运行脚本.科学运算项目,这语言基本构架就不适合,虽然有很多方法实现。
6)后期维护困难。后期提速空间局限性较大。
在对PHP有一个大致的认识以后,我们来了解一下为什么说PHP慢?
PHP的慢是相对于C/C++级别的语言来说,事实上,PHP语言最初的设计,就不是用来解决计算密集型的应用场景。我们可以这样粗略理解为,PHP为了提升开发效率,而牺牲了执行效率。
我们知道PHP一个很大的特点,就是弱类型特性,也就是说,我可以随意定义一个变量,然后给它随意赋值为各种类型的数据。以一个int整型数字为例子,在C语言中:
int num = 200; // 通常是4字节
但是,如果是PHP定义了一个同样的变量,实际对应的存储结构则是:
这个结构体将会占据远比C变量多得多的内存,PHP中定义方式如下:
$a = 200; //这变量将实际占用对比C变量很多倍的存储空间。
其实对PHP来说,无论存储什么类型的数据,都是用上述“通杀”的结构体实现。为了兼容PHP程序员的变量类型“乱入”,PHP做到了对开发者的友好,但是对执行引擎很残酷。单个变量内存消耗可能还不明显,一旦用到PHP的数组等,则复杂度指数上升(数组的实现是HashTable)。然后,Zend引擎执行时,将这些PHP代码编译为opcode(PHP的中间字节码,格式有点类似于汇编),由Zend引擎逐行解释执行。
无论是字符串的连接操作,还是数组的简单修改等,几乎都是“PHP程序员一句话,Zend引擎跑断腿”的节奏。因此,同样的操作,对比C来说,PHP消耗了更多的CPU和内存等系统资源。除此之外,还有内存自动回收、变量类型判断等等,都会增加系统资源的消耗。
例如,我用纯PHP实现的快速排序函数和原生sort函数,排序10000个整型数字,来做一个耗时对比,结果如下:
原生的sort耗时3.44 ms,而我们自己实现的PHP函数sort则是68.79 ms。我们发现,两者执行效率差距巨大。我的测试方式,是计算函数执行前后的时间间隔,而不是整个PHP脚本从启动到结束的时间。PHP脚本启动和关闭过程,本身有着一系列的初始化和清理工作,也会占据不少的耗时。
通常情况下,PHP执行效率的排行是:
最快的是PHP语言结构(isset、echo等),PHP语言的一部分(它们根本不是函数)。
然后比较快的就是PHP的原生和拓展函数。PHP拓展,基于Zend API之上,用C实现的功能,执行效率和C /Java是属于同一个数量级的。
真正慢的就是,我们通过PHP自己写的代码和函数。例如,假如我们使用的比较重的纯PHP实现的框架,因为框架本身的模块很多,所以,会明显拖累语言层面的执行效率,同时占据更多的内存。(国内的Yaf框架,以拓展的方式实现,因此执行效率远快于纯PHP写的框架。
在一般情况下,我们并不推荐用过PHP实现逻辑复杂计算类型的功能,尤其是Web系统流量比较大的场景下。因此,PHP程序员应该对PHP的各种原生函数和各类拓展有一个比较广泛的了解,在具体的功能实现场景中,寻求更原生的解决方案(原生接口或者拓展),而不是自己写一堆复杂的PHP代码来实现这类型功能。
如果有足够的PHP拓展开发实力,将这类型业务功能重写为一个PHP拓展,也会大幅提升代码的执行效率。这是一个非常不错的方式,也被广泛应用PHP优化中。但是,自己编写的PHP业务拓展的缺点也很明显:
拓展开发耗时比较长,需求变更的时候修改也复杂,写得不好可能会影响Web服务稳定性。(例如,在Apache的worker模式下,多线程场景下挂掉,会影响同一个进程下的其他正常子线程。如果是多线程的Web模式,编写拓展还需要支持线程安全)
拓展在PHP版本升级的时候,可能需要做额外的兼容工作。
人员变动后的维护和接手成本也比较高。
实际上,在互联网一线企业中,更常见的解决方案,并非增加PHP拓展,而用C/C 独立写一个服务server,然后PHP通过socket和服务server通信来完成业务处理,并不将PHP本身和业务耦合在一起。
不过,Web服务大部分的性能瓶颈都在网络传输和其他服务server的耗时上(例如MySQL等),PHP执行的耗时在整体耗时的占用比例非常小,所以从业务角度来说,影响可能并不明显。
Studio要支持Java了?
谢谢邀请!
使用过Visual Studio的程序员应该对其强大的功能印象深刻,对于70后、80后的程序员来说,Visual Studio几乎是必须掌握的开发工具,在PC时代Visual Studio几乎就是开发工具的代名词。
随着互联网时代的到来,Visual Studio的使用并没有延续之前的辉煌,随着Java、PHP、Python的崛起,Visual Studio似乎开始逐渐远离了程序员的桌面,虽然Visual Studio依然强大,但是奈何互联网选择了Java和PHP。虽然很多VS程序员转向了Java等语言,但是不可否认的是,这些程序员对VS的忠诚度还是比较高的,一直希望VS能够支持Java语言。现在VS终于开始支持Java了,对于开发人员来说,无疑是一个好消息。
VS支持Java开发至少会带来以下几个方面的好处:
第一:给了程序员更多的选择空间。在Java开发领域采用比较多的开发工具是Eclipse和IntelliJ IDEA,虽然这些工具使用起来比较方便,但是多一个选择毕竟不是坏事,更何况是微软的产品。
第二:进一步整合开发环境。对于程序员来说,一个比较麻烦的事情就是开发环境的切换,不少程序员的桌面上安装了一堆开发环境,常见的包括VS、Eclipse(IDEA)、PHP、Python等,根据目前披露出来的消息,VS此次不仅支持Java,也支持Python等多种语言的开发,甚至支持OC和Swift语言,这对程序员来说绝对是一件方便开发的好事。
第三:利于团队协作。VS支持Java语言带来的另一个好处是方便团队的协作,通过Live Share可以完成在线调试、系统开发、版本追踪等一些列功能,可以说这些对于程序开发团队来说都是非常重要的。
总之,VS支持Java开发绝对是一件好事,尤其是对于从事过VS开发的程序员群体来说。
作者简介:中国科学院大学计算机专业研究生导师,从事IT行业多年,研究方向包括动态软件体系结构、大数据、人工智能相关领域,有多年的一线研发经验。欢迎关注作者,欢迎咨询计算机相关问题。
504gatewaytime?
情况一:由于nginx默认的fastcgi进程响应缓冲区太小造成: 这种情况下导致fastcgi进程被挂起,如果fastcgi服务队这个挂起处理不是很好的话,就可能提示“504 Gateway Time-out”错误。 情况一解决办法: 默认的fastcgi进程响应的缓冲区是8K,可以设置大一点,在nginx.conf里,加入:fastcgi_buffers 8 128k 这表示设置fastcgi缓冲区为8块128k大小的空间。 情况一解决办法(改进): 在上述方法修改后,如果还是出现问题,可以继续修改nginx的超时参数,将参数调大一点,如设置为60秒: send_timeout 60; 经过这两个参数的调整,结果没有再提示“504 Gateway Time-out”错误,说明效果还是挺不错的,问题基本解决。 情况二:PHP环境的配置问题 这里需要对php-fpm和nginx进行配置修改。因为这种情况下,也会出现“504 Gateway Time-out”错误提示。 情况二解决办法( php-fpm配置修改): 将max_children由之前的10改为30,这样操作是为了保证有充足的php-cgi进程可以被使用。 将request_terminate_timeout由之前的0秒改成60秒,这样使php-cgi进程处理脚本的超时时间提高到60秒,可以防止进程被挂起以提高利用效率。 情况二解决办法(nginx配置修改): 为了减少fastcgi的请求次数,尽量维持buffers不变,要更改nginx的几个配置项,如下: 将fastcgi_buffers由4 64k改为2 256k; 将fastcgi_buffer_size 由64k改为128k; 将fastcgi_busy_buffers_size由128k改为256k; 将fastcgi_temp_file_write_size由128k改成256k。 情况二解决办法修改完,需要重新加载php-fpm和nginx的配置,然后再进行测试。之后就没有发现“504 Gateway Time-out”错误,效果也还是不错的。