OS-同期と非同期


同期と非同期


:データの受信方法


✔同期(同期)

  • は同時発生を意味し、請求と結果が同時に発生する約束である.
    要請すれば、どんなに時間がかかっても、その場で結果を出さなければならない.
    (要求後→応答後→次の動作を実行)
  • .
  • ノードとノード間のタスク処理単位を同時に調整します.
  • の利点:設計は非常に簡単で直感的です.
  • 短所:結果が出るまで、何もできず、待つしかない.

    ✔非同期

  • が同時に発生しないことは、要求と結果が同時に発生しない約束を意味する.
  • (リクエストから応答まで)
  • 要求の位置に結果はない
  • ノードとノード間のタスク処理単位を同時に調整することはありません.
  • の利点:要求が発行され、結果が生成する時間内に他のタスクを実行することができ、リソース
  • を効率的に利用することができる.
    欠点:動機より複雑です.動機と非動機は、あるタスクまたはそれに関連するタスクを処理する異なる視点である.

    ✔非同期操作


    コールバック()コールバック():非同期関数ひどうきかんすう


    関数は別の関数のパラメータとして渡され、イベントが発生すると、パラメータとして渡される関数が再び呼び出されます.
    コードが長ければ長いほど可読性が悪くなり、管理が困難になる→コールバックヘルプ
    const f1=(callback)=>{
        setTimeout(function(){
            console.log("1번 주문완료");
            callback();
        }, 1000);
    };
    const f2=(callback)=>{
        setTimeout(function(){
            console.log("2번 주문완료");
            callback();
        }, 2000);
    };
    const f3=(callback)=>{
        setTimeout(function(){
            console.log("3번 주문완료");
            callback();
        }, 1000);
    };
    console.log('시작')
    f1(function(){  
        f2(function(){
            f3(function(){
                console.log("끝")
            });
        });
    });

    promise()


    非同期実行操作の結果を表すオブジェクト(非同期結果をオブジェクト化)
    おいしい
    const pf1 = () => {
      return new Promise((res, rej) => {
        setTimeout(() => {
          res("1번 주문완료");
        }, 1000);
      });
    };
    const pf2 = () => {
      return new Promise((res, rej) => {
        setTimeout(() => {
          res("2번 주문완료");
        }, 2000);
      });
    };
    const pf3 = () => {
      return new Promise((res, rej) => {
        setTimeout(() => {
          res("3번 주문완료");
        }, 3000);
      });
    };
    console.log("시작");
    pf1()
      .then((res) => pf2(res)) //f1(프로미스반환)실행, resolve함수를 실행으로 넘긴값을 f2로 넘겨줌
      .then((res) => pf3(res))
      .then((res) => console.log(res))
      .catch(console.log)
      .finally(() => {
        console.log("끝");
      });

    async/await()


    最も単純で,鎖の形でPromisを呼び出すthen法よりも毒性がある.
    const pf1 = () => {
      return new Promise((res, rej) => {
        setTimeout(() => {
          res("1번 주문완료");
        }, 1000);
      });
    };
    const pf2 = (message) => {
      console.log(message);
      return new Promise((res, rej) => {
        setTimeout(() => {
          res("2번 주문완료");
        }, 2000);
      });
    };
    const pf3 = (message) => {
      console.log(message);
      return new Promise((res, rej) => {
        setTimeout(() => {
          res("3번 주문완료");
        }, 3000);
      });
    };
    console.log("시작");
    async function order() { //await는 async함수 내부에서만 사용가능 일반함수에서 사용하면 에러
      const result1 = await pf1();//프로미스 차례가 될때까지 기다림 result에 pf1의 resolve된 값을 넣어줌
      const result2 = await pf2(result1);
      const result3 = await pf3(result2);
      console.log(result3);
      console.log("종료");
      //result1 변수에 pf1()데이터가  기다렸다가 들어가니깐 promise의 then보다 가독성이 좋음
    }
    order();