ホームページ  >  記事  >  バックエンド開発  >  シュモップについての質問

シュモップについての質問

WBOY
WBOYオリジナル
2016-06-13 13:41:22940ブラウズ

shmop
の問題点は、プログラム内でデータを頻繁に処理する必要があり、毎回 MySQL にクエリを実行したくないため、使用するレコードを取り出して shmop を使用して保存することです。後で修正できるようにメモリ内に保存します。

しかし、書き込みプロセス中に、私は突然同時実行制御の問題を思い出し、それを解決する方法がわかりませんでした:

function function1(){
メモリ データの読み取り
長期動作 (変更行 x1)
メモリデータの書き込み
}

function function2(){
メモリデータの読み取り
長期動作 (変更行 x1) 行(){
セマフォの取得
メモリデータの読み取り
長時間操作 (修正行 x1)
メモリデータの書き込み
セマフォの解放
}

関数 function2() {
セマフォの取得
メモリデータの読み取り
長時間操作 (変更行 x2)
メモリデータの書き込み
セマフォの解放
}

これで問題は解決します, 当初の意図に反しますが、キャッシュを使って高速化するのですが、この方法では長時間の操作を同時に実行することができないため、必然的に遅くなります

書き込み時にのみ同期する場合。
function function1(){
セマフォの取得
メモリ データの読み取り
セマフォの解放

長時間の操作 (変更行 x1)

セマフォ取得
メモリデータ書き込み
セマフォ解放
}

function function2(){
セマフォ取得
メモリデータ読み出し
セマフォ解放

長時間の操作 (変更行 x2)

セマフォの取得
メモリ データの書き込み
セマフォの解放
}

次に、function1 がたまたまデータと function2 の読み取りを完了した場合function1 がデータを書き込むと、function2 が書き込んだデータが消去され、function2 は無駄にビジーになります。 。 。

Java Servlet がとても懐かしいです。Java Servlet はオブジェクトの参照を取得できる限り、対応する行のみを変更できます。 PHP では、オブジェクトをメモリに保存する前にオブジェクトをシリアル化する必要があります。オブジェクトを移動するには、オブジェクト全体を一緒に移動する必要があり、これは非常に面倒です。 。 。

解決方法が分かりません、相談してみてはいかがでしょうか?


-----解決策--------------------------------

昨年末に一度使用しましたが、メモリの問題が頻繁に発生し、PHP プロセスが停止してしまいました。ネットで調べてみると、WIN XP は破棄などの操作をサポートしていないことがわかりました。 WIN 2003 でも同じ問題が発生するかどうかはわかりません。

-----解決策---------とにかく、操作してみると、 XPでは不可能でした。メモリの上書きと破壊は、別のIDを開いて再保存することしかできません。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。