検索

ホームページ  >  に質問  >  本文

objective-c - 线程同步和异步的区别?IOS中如何实现多线程的同步?

这个关于线程的问题怎么实现?

PHP中文网PHP中文网2756日前515

全員に返信(3)返信します

  • 高洛峰

    高洛峰2017-04-28 09:07:18

    私自身の理解を述べさせてください、私が間違っている場合は修正してください。

    スレッド同期は、複数のスレッドが同時に同じリソースにアクセスするため、同期アクセスによって引き起こされる一連の問題を解決する必要があります。
    たとえば、2人がかごからリンゴを取り、1人がそれを取り、もう1人にそれを取らせても問題はありませんが、効率は高くありません。 (totalTime = timeOfA + timeOfB)
    あなたが1つ、私が1つを同時に取らせると効率的ですが、二人ともリンゴを掴むと問題が発生します。 A がリンゴを受け取るとき、B が最初に待ち、次に A がリンゴを受け取るまで待ってから B がリンゴを受け取ります。あるいは、A は A の側にあるもののみを取ることができ、B は B の側にあるもののみを取ることができます。これで問題は解決します。
    iOSで最も重要な方法は、アクセス中はロックし、アクセス完了後にロックを解除することです。どのようなロックを追加し、どのようにロックするかについては、インターネット上の多くの情報が非常に詳細に説明されています。

    返事
    0
  • 为情所困

    为情所困2017-04-28 09:07:18

    同期 非同期 スレッド同期は異なる概念です同步 异步 线程同步,是不同的概念

    接楼上同学的例子

    你拿一个苹果,然后我拿一个苹果, 这叫同步执行
    你和我同时去拿苹果,这叫两个线程异步执行,这里为了实现异步,使用了多线程的手段,你和我各属于一个线程
    然后就会出现问题了,如果你和我伸手拿了同一个苹果怎么办? 这个时候就需要你和我进行线程同步

    クラスメイトを2階に迎えに行く例#🎜🎜# #🎜🎜#あなたがリンゴを取り、次に私がリンゴを取ります。これは 同期 実行と呼ばれます。
    あなたと私が同時にリンゴを取り出すことは、2 つのスレッド と呼ばれます。非同期 実行。ここでは 非同期 を実現するために、マルチスレッド が使用されます。あなたと私はそれぞれ 1 つのスレッドに属します。
    その場合、問題が発生します。 . あなたと私が手を差し伸べたら、同じリンゴを取ったらどうすればいいですか? 現時点では、あなたと私は スレッド同期 を行う必要があります。たとえば、最初にバスケットを見た人がそのバスケットをロックし、他の人を待たせ、それを取った後にロックを解除します#🎜🎜#

    返事
    0
  • ringa_lee

    ringa_lee2017-04-28 09:07:18

    多くの人は、非同期がマルチスレッドを意味すると考えていますが、これは間違いです。

    スレッドはコードであり、CPU が実行する必要があるコードです。2 つのスレッド コードを一緒に実行すると、ブロックされていないように感じられます。しかし、それはまだコードです。 CPU はまだそこで待機しています。

    非同期は主に io、ファイル io、ネットワーク リクエスト io に使用されます。同期 io がプロセスをブロックすることを望まないため、応答機能を向上させる非同期の方法があります。非同期を使用するには、オペレーティング システムがイベント委任をサブスクライブする必要があります。クロージャ関数など スレッドについては同じことが言えません。

    ハードウェアについて少しでも知っていれば、中断を感じることができます。

    例として、みんなが話しているリンゴを考えてみましょう...
    非同期とは、コンピュータにリンゴを取得するように指示することを意味します。
    コンピューターは、この機能に応答するために Apple ハードウェアを使用します。 CPUと何か関係があるのでしょうか?もうない。 CPU に遅延は生じません。
    Appleがネットワークからリクエストした場合、Appleを取得するのはネットワークカードです

    返事
    0
  • キャンセル返事