Javaのコレクション[インタビュー] JavaSE_2.1_Java基底●あなたはJavaとPHPの違いを教えてくれるか?


この論文は、3つの部分に分かれている
主な違い①PHPとJavaは何?- eechen答え-知っているほとんど
https://www.zhihu.com/question/20377398/answer/141328982

②2019年4月1日にリリースさh4cd -オープンソース中国
https://www.oschina.net/news/105566/php-8-will-support-jit

③ジョー・ワトキンス-Musings、忍者ones-考えて、忍者
2019年3月30日(土曜日 )
PHP GR8
https://blog.krakjoe.ninja/2019/10/
ここに画像を挿入説明

ほとんど知られている - ①eechen答え

PHPは、まだ実行には、Javaランタイムとしてホットとして、ことをJITコンパイルされたコードをサポートしていません
(ただし、PH8は、その導入確認:PHP 8サポートJIT(ジャストインタイム)コンパイラはリアルタイム機能を実行するかどうかを、最新のニュースは、公式に確認したことで、その導入。)
が、PHPは、対応するオペコードキャッシュメモリ内のスクリプトを置くためopcache機構を備えているが、
PHP7もファイルに設定opcache.file_cache輸出オペコードをサポートし
、サードパーティのFacebook HHVMサポートJITを。
加えてopcacheメカニズムの周りPHP公式LLVMの上に構築されましたZendのJIT分岐テストも開発されている。
10倍速くPHP 5.4以上のphp-srcの/ Zendの/ bench.phpテスト、PHP JITのブランチに表示されます。

https://github.com/zendtech/php-src/tree/zend-jit/ext/opcache/jit
https://www.phpclasses.org/blog/post/493-php-performance-evolution.html
ここに画像を挿入説明

Javaで書かれたコアJavaランタイムライブラリ一方(JDK / JRE / LIB / rt.jarの、60メガバイトを超える)Cで実装PHPライブラリ関数、(JDK / src.zip)ので、実行中のJavaアプリケーション、ユーザー作成メソッドは万回行われるまで、コードライブラリやフレームワークと参照は、Java HotSpotのJVMの実行機構で解釈されるべきである。(-XX:CompileThreshold = 10000)この前のインタプリタモードで実行し、JITコンパイラをトリガしますそれは状況によって消費される時間を説明するための方法よりもさらに実行するJITコンパイラを表示させるのにかかる時間を避けるために。

PHPは組み込みのテンプレートエンジン、テンプレート言語自体がある。このようにTomcatまたはサードパーティのテンプレートエンジンとしてJSPのJava Webコンテナを使用する必要があります。

PHPは、ApacheおよびFastCGIモジュールを実装libphp.soサービスPHP-FPMだけでなく、HTTPサーバとSQLiteのデータベースを内蔵。そして、一般的にTomcatのサーブレットコンテナやその他の第三者と、Java Web開発を使用する必要があります。

PHPは、内蔵のシングルプロセスHTTPサーバ(つまり、素早く開発し、テストするために使用することができます):
PHP 127.0.0.1:8080 -S -t / WWW

nginxのでPHP-FPMは、マルチプロセスアーキテクチャで、ワーカープロセスが要求は、マスター・プロセスが要求を処理しませんハンドル、定量的に再起動など、メンテナンスワーカープロセスのための唯一の責任があり、再起動プールへのプロセスのために.PHP-FPMのサポートをクラッシュは、異なるプロセスプールなどの機能します互いに分離、互いに独立たとえば、IO集中型スクリプトを分離するプロセスを監視9001 ioのモニタポート9000のWWWプロセスプール、プールを構成することができます。

nginx.conf:io.phpはPHP-FPM 9001プーリングのプロセスモニタへのアクセスを要求している
場所を= {/io.phpは
fastcgi_paramsを含み;
fastcgi_pass 127.0.0.1:9001;
fastcgi_param SCRIPT_FILENAME D インクルード C メートル E n個 トン R インクルード インクルード トン DOCUMENT_ROOT fastcgi_script_name;
}
PHP-FPM:静的スクリプトによってプール通常のWWWはIOセルをブロック動的による処理スクリプト
[WWW]
;プールリスニングポート9000と呼ばれるWWWプロセス、プロセスは、永久4の固定数である
= 127.0を聴きます.0.1:9000
PM =静的
pm.max_children = 4
[IO]
ポート9001をリスニングioのと呼ばれるプロセスプール、常駐プロセス4の数、最大8
聞く127.0.0.1:9001 =
PM =動的
pm.max_children = 8
pm.start_servers。4 =
pm.min_spare_servers。4 =
pm.max_spare_servers = 4
前記I / O集約的なプロセス、そのプール[IO] preforkの動的プロセス8がビジーである、例えば、アイドル4。
使用PHP-FPM細胞の単離は、集中コンピューティング別個に設けられ、I / O集中操作は、全体のPHPアプリケーションの目詰まりを低減することができます。

換言すれば、PHPの並行マルチコアマルチプロセス、マルチスレッドとJava並行性のユニバーサル採用の使用を介して、JVMインスタンスはプロセスであるためです。

また、PHPはまた、このようなイベントMPMとFacebook HHVM Apacheはマルチスレッドアーキテクチャであるとして、マルチスレッド・モードで実行することができます。マルチプロセスまたはマルチスレッド動作モードPHP Webは、PHP開発者がケアと制御を必要としないかどうか、 PHPの開発者は、PHP-FPMによって/ HHVM / Apacheの実装、プロセスとスレッドの管理に参加する書き込みコードする必要はありません。

PHP-FPMプロセス管理と同時実装は、PHP開発者を心配する必要はありません。また、Javaのマルチスレッドプログラミングでは、マスター・プロセスが自動的に新しいワーカープロセスを作成し、PHPにつながらない、関与.PHPワーカープロセスがクラッシュをコーディングJava開発者が必要ですJavaはマルチスレッドのクラッシュの出口にJVMの原因となります(例えば、例外をキャッチしない)わずかなミスをプログラミングしながら、サービスがクラッシュします。

PHP-FPMとApache mod_phpの、サービスプロセスの常駐メモリが、リソースを解放するための要求のために、このメモリは、非常に徹底的にリリースされています。PHPベースのGCの参照カウントも終了したプログラムで役割を果たしていなかった。また、 JavaのガベージコレクションメカニズムはGCを再要求メモリで忙しく扱うことができない雪崩:. JVMにつながる高い同時実行Javaサービスの下でGC、全GCに大きく依存していながら未設定の明示的に空きメモリが使用PHPスクリプトで即時で、遅延はありませんリクエスト、新しい要求と安定したストリームの到着。

PHP PHPは容易ではないです自然なサポートを達成するために熱い展開、ホットデプロイおよびJavaの動作モードを決定します。PHP開発者が仮想空間上にFTP経由でファイルをアップロードするので、これは、仮想ホスティング環境で、なぜPHP支配的な理由でありますコード更新や展開を実現しています。

PHP共有セッションファイルに基づくメカニズムの使用に加えて、プロセス間でのデータ、及び鳥兄弟開発ロックフリー共有キャッシュメモリ拡張Yac.Linuxも/dev/shm/data.sqlite3として(メモリ・ファイル・システム(TMPFS)上のSQLiteを使用することができ)。JVM常駐メモリのJavaプログラムのライフサイクルは、スレッドが共有データにアクセスすることができます。

PHPドライバはデータベース駆動型データベースのアクセス速度が存在しないようmysqlndなどのJava .PHPの問題、より遅いCで実装されており、データベース駆動型のJava JDBCドライバはJavaで実装され、PHPドライブのパフォーマンスが低下。そしてまた、PHPをサポートしていませんデータベースに再接続し、永続的なデータベース接続、である、複数の要求をすることができ、それぞれの要求は、次の図のように、データベース接続を開く必要はありませんが2つの長い接続のMySQLのプロセスが残っを持つ2つのPHP-FPM作品です:.
ここに画像を挿入説明
PHP今Javaは1995年に生まれた、全くPHP Javaは新星の反対の引数ではなく、Web開発のための最初のPHP、むしろ.javaファイルより組込みソフトウェアの開発・設計のためのオークJava言語の前身、ではありません。

PHPのCの実装は、後にオブジェクト指向プログラミングのサポートは、両方のプログラムを使用し、あなたもオブジェクトを使用し、より柔軟にすることができます追加し、C ++のオブジェクト・プログラミングの考え方を吸収した。そして、Javaは完全にオブジェクト指向プログラミングでなければなりません、でも、クラス名とファイル名がリンク。

PHPは、計算集約型アプリケーションでの.javaを(達成するために、主にC / C ++)例えば、PHPは、データベースエンジンを開発するには適していない。ユーザは、PHPを使用して、ローカル条件に従ってかどうかに応じて、大規模なアプリケーションを開発し、他の計算集約型アプリケーションができません比較PHP複数のJava実装を使用してこのようなHBaseのデータベースのような利点は、ほとんどのWebアプリケーションは、ネットワークI / Oを含むI / Oを多用するアプリケーション、ファイル・システムI / O、データベースI / Oです。

PHPはC迅速なWeb開発フレームワークで実装され、フレームワークは、急速な発展を達成するために第三者に頼ることはできません。ザ・JavaのWeb開発者は、一般的にSpringなどのサードパーティ製のフレームワークに依存しています。

追加:
返信
@溝

データベースへの持続的接続は、使いやすいパラメータpホストを渡すことでmysqliのです:127.0.0.1はPDOでの持続的な接続、PDO_MYSQLを開くことができるようになります:: ATTR_PERSISTENTも真PHP持続的接続とデータベースPHP-を依存していないとの永続的な接続をオンにすることができます。 FPM、単に説明するための私のショットが、実際には、また、アパッチを使用することができる。わずか数PHP-FPMプロセスまたはApacheプロセス/好ましくは一定量だけでなく番号として設定スレッドが(MySQL接続の最大数を超えることはできませんMAX_CONNECTIONSデフォルト151)。

プロセス間のデータ共有、YACに加えて、私はSQLiteのロック機構の十分なうん、でも、トランザクションがサポートされていますか?Linux上でSQLiteのメモリファイルシステムがそれをtmpfsは言っていないです、あなたは何を心配していないか、そしてSQLiteののメモリを心配する必要されています読み取りと書き込みの性能の限界、SQLiteのエンジンは完全にメモリ集中型の操作で計算されます。Linuxは、私は利点が非常に安定していると思いますが、PHPの実装を依存することなく、SQLiteのロック機構を使用することができ、tmpfsの仕組みを利用することができます。

CLIは、このようなSwoole PHPサービスは、ここで説明の下で達成、伝統的なPHPのFastCGIモードではありません。PHPスクリプトを、当然のことながら、背景の長い時間の居住者のためのGCへの必要性を実行する。リアルタイム性の高い同時実行アプリケーションの要件のいくつかのために、私はそれはすべきではないと思いますGCは、GCを無効にするメカニズム.PHP zend.enable_gc =オフを使用して設定することができ、手動でメモリを解放しますが、FastCGIのPHPスクリプトのライフサイクルの下で実行することは非常に短く、設定解除、自分のことで、実際には、我々はGCに頼るべきではありません。もう一度、高い同時実行リアルタイム型アプリケーションでは、GCは利点が、不利になることはありません。

一般的なPHP SAPIはので、いくつかあります:
PHP(CLI、CLI-サーバー)
PHP-CGI(CGI-fcgiの)
PHP-FPM / hhvm(FPM-fcgiの)
libphp7.so/php7apache2_4.dll(apache2handler)
FPM-fcgiのとapache2handlerいずれかのマルチモードまたはマルチスレッドプロセスモデルの下で、実装し、プロセスを管理し、スレッドは、PHP開発者は(利点がある)を気にする必要はありません、しかしによるPHP-FPM / hhvm / apacheのあなたが参加したい場合は.PHPの開発を実現マルチプロセスまたはマルチスレッドプログラミングは、PHP-CLIで達成することができ、関連するPECL拡張機能は、プロジェクトの実現に関連し、PCNTLマルチプロセス、pthreadsのは、マルチスレッド、libeventイベント駆動型などが含まWorkerManを持っている。また、ピーク兄Swooleも使用PHPに必要PHP開発者のケアのための-cli実行されますが、そのサービスのプロセスとスレッド制御およびより少ない必要性はSwooleによって実装されます。

PHP 5.4から、組み込みHTTPサーバー、シングルプロセス、目的は迅速な開発とテストのためですが、私はそれは非常に便利なツールだと思い、開発者はインストールする必要はありませんし、Configure ApacheやnginxのWebサーバーは、スターターのようにすることができます。そして、クロスコンパイルのAndroid携帯電話またはOpenWrtのワイヤレスルータにPHPインタプリタは、LANや提供するサービスで、この地域のHTTPサーバのPHPプログラミングのリソースを使用できるようになり、それが便利です。

JITがbench.phpスクリプトは、コンピューティングの性能をテストするために使用され、多数の計算上の利点があります。など、ワードプレス、など実際のアプリケーションを、JITは確かにそれほど明白ではないでしょうパフォーマンスの向上をもたらすことができ、JITがに、メカニズムHHVMとJIT PHP7を持っていませんストレステストは、同じレベルに反映ワードプレス、この問題を示しています。そして、私が強調し、Webアプリケーションの大部分はI / O集中型のアプリケーション、コンパイル言語は、大きさの順にI / O集中型のアプリケーションではないにも利点があります。そう、JIT PHP7のための機構がない場合でも、PHP開発者の大多数のため、パフォーマンスが良い十分です。

返信
残留風@

MEMのphp-FPM &&包囲-C10 -t1M http://www.example.com/app/punbb/index.php>を/ dev / null && MEMのphp-FPM
〜/ .bashrcのレーンでのMEMの私の定義です関数は、ケースのためにすぐにプログラム名に使用されます
MEM(){
。はgrep $ -i 1 | sedの'1,7d' | |ヘッド-n7 | sedの'1,6d' &&トップ-n1 -bトップ-n1 -b | grepの-v grepを;
。PS AUX | grepの1 $ -i | grepの-v grepの|のawk -F ""」6 $ = {} + SUM {printfのEND。「常駐セットの合計サイズ:.1f%のMB(%D KB)\ N- 」、SUM / 1024、SUM}「;
}

テストプログラムPunBBは軽量なPHPのMySQL駆動のフォーラムです。

攻城10と並行して、圧力が1分を測定し、PHP-FPMのワークプロセスメモリ(RES)は13.4メガバイトであり、メモリ使用量は、要求の数と一緒に成長していきますあなたはPHP-FPMと呼ばれる疑いがあり、写真と真実がありません:
ここに画像を挿入説明
ここに画像を挿入説明ここに画像を挿入説明
ここに画像を挿入説明

オープンソース中国②h4cd-

すべてに沿って、我々はPHP 8リアルタイム機能を実行するために、JIT(ジャストインタイム)コンパイラをサポートするかどうかを議論している、最新のニュースは、公式にはその導入を確認したことです。
PHP 8にJITが含まれていますか?

本名 はい 番号
2(2)
ashnazg(ashnazg)
beberlei(beberlei)
ブランドン(ブランドン)
Bvoabi(Bvoabi)
carusogabriel(carusogabriel)
CMB(CMB)
cpriest(cpriest)
ダム(ダム)
danack(danack) ×
derick(derick)
diegopires(diegopires)
ドミトリー(ドミトリー)
duncan3dc(duncan3dc)
オーダー(注文)
galvao(galvao)
guilhermeblanco(guilhermeblanco)
Jdkrshr(Jdkrshr)
jmikola(jmikola)
jpauli(jpauli)
jwage(jwage)
コール(コール)
klaussilveira(klaussilveira)
krakjoe(krakjoe)
laruence(laruence)
lcobucci(lcobucci)
左(左) ×
lukenho(lukenho)
マリアン(マリアン)
mbeccati(mbeccati)
マイク(マイク)
narf(narf)
ネール(ニール)
nikic(nikic)
ocramius(ocramius)
Pjoye(Pjoye)
スローガン(スローガン)
金曜日(金曜日)
pmmaga(pmmaga)
かわいい(かわいいです)
レミ(レミ)
reywob(reywob)
rtheunissen(rtheunissen)
カンザスシティ(カンザスシティ)
sammyk(sammyk)
STAS(STAS)
svpernova09(svpernova09)
tianfenghan(tianfenghan)
wjx(wjx)
yunosh(yunosh)
あるZeev(あるZeev)
シナモン(シナモン)
最終結果: 50 2

JITのメリット

JITは、メインのパフォーマンスの向上だけでなく、拡張された言語サポートと言語の生態的発達を使用して、シーン全体のパフォーマンスがあります。

目前已经很难通过常规手段提升 PHP 的性能,JIT 基本上是目前性能提升的唯一手段;
JIT 带来的性能提升可以让 PHP 在更多使用场景( CPU 密集)中发挥作用;

可以使用 PHP 来开发内置函数,而不用担心性能方面的问题。这一方面可以加速语言的发展(更多人可以参与进来),同时也可以减少目前使用 C 开发容易出现的内存管理、溢出等问题

PHP 实现了一个虚拟机 Zend VM,它会将人类可读脚本编译成虚拟机理解的指令,也就是操作码,这个执行阶段就是“编译时(Compile Time)”;在“运行时(Runtime)”执行阶段,虚拟机 Zend VM 会执行这些编译好的操作码。

通常编译时与运行时两个阶段是独立分开的,脚本编译完成后,像 APC 与 OPCache 这样的字节码缓存组件会缓存这些操作码。而 JIT 去掉了编译时阶段,它将这编译时与运行时两个阶段合为一体,实现即时编译与执行。

JIT 是一种编译器策略,它将代码表述为一种中间状态,在运行时将其转换为依赖于体系结构的机器码,并即时执行。在 PHP 中,这意味着 JIT 将为 Zend VM 生成的指令视为中间表述,并以依赖于体系结构的机器码执行,也就是说托管代码的不再是 Zend VM,而是更为底层的 CPU。

虽然自 PHP 7.0 以来,通过优化核心数据结构 HashTable、强化 Zend VM 中某些操作码与持续改进 OPCache 的 Optimizer 组件等具体措施,PHP 性能得到了显著提升,但是实际上这些优化似乎已经走到极限了。现在 JIT 从底层着手,被认为是目前提升 PHP 性能的最佳出路。

关于是否引入 JIT 的官方投票结果已于近日公布,因为大部分核心开发者投了赞成票,所以 PHP 8 中将会支持 JIT。

另外值得一提的是,PHP JIT 对于使用 PHP 的网站来说提速可能并不明显,因为 JIT 在 CPU 密集型的代码上效果最好,而一般情况下,用 PHP 编写的程序都是 I/O 密集型的。

简单来说就是,PHP 程序往往受限于 I/O 而不是 CPU,使 PHP 代码运行速度变慢的因素往往是它们正在执行的 I/O 操作,包括连接、读取和写入数据库、高速缓存、文件与套接字等。

PHP 中 CPU 密集型代码的一个例子是 Zend/bench.php。

那么 PHP 中的 JIT 将会在哪里发挥作用呢?答案是数学领域。

关于 PHP JIT 的详细介绍,可以查看:https://blog.krakjoe.ninja/2019/03/php-gr8.html

③乔·沃特金斯-Musings, ninja ones-思考,忍者

Saturday, 30 March 2019
PHP GR8ここに画像を挿入説明
除非您生活在一块岩石上,或者是过去的(在这种情况下,欢迎您),否则您将意识到JIT即将到PHP 8:今天的投票悄无声息地结束,绝大多数人赞成合并到PHP 8中,所以它是正式的。

为庆祝而抛出一些疯狂的形状,如图1所示,它甚至被称为“(底特律)准时制”……

现在坐下来阅读下面的神话破坏文章,我们将消除对这些东西的困惑。 JIT是什么,它将带来什么好处,并深入研究它的工作原理(但只有一点点,因为我不想让您感到无聊)。

由于我不知道我在跟谁说话,所以我将首先从简单的问题开始,然后再处理复杂的问题,如果您已经确定知道标题中的问题的答案,您可以跳过该部分…

什么是准时制?

PHP实现了一个虚拟机,一种虚拟处理器-我们称之为Zend VM。PHP将您可读的脚本编译为虚拟机可以理解的指令(我们称它们为操作码),此执行阶段称为“编译时间”。在执行的“运行时”阶段,虚拟机(Zend VM)将执行您的代码指令(操作码)。

这一切都很好,并且诸如APC(过去)和OPCache(今天)之类的工具会缓存代码的指令(操作码),以便“编译时间”仅在必须时发生。

首先,用一行来解释一般的JIT:即时是一种编译器策略,它采用中间代码表示并将其在运行时转换为与体系结构相关的机器代码-即时执行。

在PHP中,这意味着JIT将为Zend VM生成的指令视为中间表示,并发出与体系结构相关的机器代码,因此,代码的宿主不再是Zend VM,而直接是您的CPU。

为什么PHP需要JIT?

从Facebook HHVM项目的健康竞争开始,自PHP 7.0出现之前就一直是PHP内部社区的关注焦点。PHP 7.0的大多数核心更改都包含在PHPNG补丁中,该补丁大大改善了PHP在其核心中利用内存和CPU的方式,此后我们每个人都被迫密切关注性能。

从PHP 7.0开始,已经进行了一些性能改进,对HashTable(PHP的核心数据结构)进行了优化,在Zend VM中对某些操作码进行了专门化,对编译器进行了对某些序列的专门化,以及对Optimizer组件的持续改进OPCache …以及其他很多东西,太无聊了。

荒谬的事实是,这些优化只能将我们带走,而我们正在迅速接近或可能已经遇到了进一步改进它的能力。

警告:当我们说诸如“我们无法进一步改进”之类的东西时,我们真正的意思是,“我们必须做出的进一步改进的权衡不再具有吸引力”……每当我们谈论时关于性能优化,我们正在谈论取舍。通常,要在性能方面进行权衡取舍。我们都想认为最简单的代码是最快的代码,但是在现代C编程世界中情况并非如此。最快的代码通常是准备利用依赖于体系结构的内在函数或依赖于平台(编译器)的内置函数的代码。简单性并不能保证最佳性能…

目前,将PHP转换为JIT的能力似乎是从PHP压缩性能的最佳方法。

JIT可以使我的网站更快吗?

可能性不大。

也许不是您所期望的答案:通常,用PHP编写的应用程序受I / O约束,而JIT在受CPU约束的代码上效果最佳。

“ I / O和CPU绑定”到底是什么意思?

当我们要描述一段代码或应用程序的一般性能特征时,我们使用术语I / O绑定和CPU绑定。

用最简单的术语来说:
如果我们可以改进(减少,优化)它正在执行的I / O,则一段受I / O约束的代码会更快。
如果我们可以改善(减少,优化)CPU正在执行的指令,或者(神奇地)提高CPU的时钟速度,则CPU约束的代码段将更快。
一段代码或一个应用程序可能受I / O约束,CPU约束或同等地绑定到CPU和I / O。

通常,PHP应用程序倾向于受I / O约束-放慢它们的速度是它们正在执行的I / O-连接,读取和写入数据库,缓存,文件,套接字等。

CPU绑定的PHP是什么样的?

由于大多数PHP应用程序的本质,CPU绑定代码并不是很多PHP程序员都会熟悉的东西-他们的工作往往是连接到某个数据库,或者可能是缓存,进行一些轻松的工作并吐出html / json / xml响应。

您可能会四处查看代码库,发现许多与I / O无关的代码,甚至正在调用完全与I / O断开连接的函数的代码,并且很困惑我似乎暗示这并没有使即使与非I / O相比,处理非I / O的代码行可能更多,但仍受应用程序CPU的限制。

PHP实际上相当快,它是世界上最快的解释语言之一。Zend VM调用与I / O无关的函数与在机器代码中进行相同的调用之间没有显着差异。显然有区别,但是事实是机器代码具有调用约定,而Zend VM具有调用约定,机器代码具有序言,而Zend VM具有序言:您是否在Zend Opcodes或机器代码中调用some_c_level_function()不会对进行调用的应用程序的性能产生重大影响-尽管似乎可以对该调用产生重大影响。

注意:调用约定 (大致) 是在进入另一个函数之前执行的指令序列,而序言是在进入另一个函数*时执行的指令序列:在两种情况下,调用约定都将参数压入堆栈,序言将它们从堆栈中弹出。

关于循环,尾部调用和XI的问题是什么呢:PHP实际上非常聪明,启用了OPCache的Optimizer组件后,您的代码就可以像魔术一样转换为您可能编写的最高效的形式。

现在必须注意,JIT不会从VM建立的约定中更改Zend函数的调用约定-Zend必须能够随时在JIT和VM模式之间切换,因此决定保留调用约定由VM建立。结果,在JIT中,您到处都可以看到的那些呼叫并没有明显地更快。

如果您想查看CPU绑定的PHP代码是什么样子,请查看Zend / bench.php …这显然是CPU绑定代码的一个极端示例,但是应该可以理解JIT真正发挥作用的地方是数学领域。

PHP是否做出了最终的权衡以提高数学速度?

否。我们这样做是为了扩展PHP的范围,并且相当大地如此。

不希望自己大声疾呼,我们已经覆盖了整个网络-如果您是2019年的Web程序员,并且尚未考虑将PHP用于下一个项目,那么您做错了Web-在这个非常偏颇的PHP开发人员看来。

乍一看,要提高在PHP中更快地执行数学的能力,范围似乎很狭窄。

但是,这实际上为诸如机器学习,3d渲染,2d(gui)渲染和数据分析之类的事情打开了大门。

为什么在PHP 7.4中不能使用它?

我只是将JIT称为“最终的折衷”,我认为是:它可以说是有史以来发明的最复杂的编译器策略之一,也许是最复杂的。引入JIT会带来相当大的复杂性。

如果您问Dmitry(JIT的作者)是否使PHP变得复杂,他会说“不,我讨厌复杂性”(这是直接引述)。

从根本上讲,复杂是我们所不了解的一切,目前,很少有真正了解我们所拥有的JIT实现的内部开发人员(少于少数)。

PHP 7.4とPHP 7.4、すぐには、PHPの統合バージョンを提供してくれるだろう、非常に少数の人々は、修理、または(任意の実用的な意味から)改善をデバッグすることができます。PHP 7.4への参加を拒否する人のために、これは単に容認できない状況です。

今からPHPへの期間8件のでは、私たちの多くはJITを学ぶために彼の空き時間に動作します:PHP 8ツールを書き換える必要性、我々は最初に、我々はまだよくとして達成すべき機能を持ってJITを理解する必要があります。私たちは、有権者の非常に特定多数決は、それが私たちに提示されると思いますありがとうございました、この期間を必要とします。

複合体は同義ひどいではありません:JITはこの複雑である一方、複合体は、美しい星雲のようにすることができます。原則的に、あなたは完全に物事の複雑さを理解し、しかしわずかに物事の表面の複雑さを軽減することができます。言い換えれば、20人の内部開発者はドミトリーJITなどの使い慣れた通りがあっても、また、実際にJITの複雑さを変更することはできません。

PHPの開発者は、それが遅くなりますか?

それはなると思う理由はありません。私たちは自信を持って、我々はPHPで、今日と修正エラーですと邁進として少なくとも良いとして、我々はすでにJIT精通十分な人々を持っている、PHP 8に一般的に利用可能な、それを言うことができる十分な時間を持っています。

あなたがJITにしようとすると、本質的に複雑なアイデアと同等である、我々は実際に機能について話している新機能の導入に時間の大半を過ごすご検討ください。ほとんどの機能、あるいは修正するために、書き込みコードは、数分または数時間かかることがあり、ディスカッションの時間が数週間または数ヶ月かかる場合があります。まれに、関数のコードを書くことは、数時間または数日かかる場合がありますが、それらのまれなケースでは、議論は常に時間がかかります。

これは、私が言いたいです...

素敵な週末を。

おすすめ

転載: www.cnblogs.com/guoxinyu/p/12070243.html