👤
Novice Handbook
  • Novice Handbook
  • Guide
  • Internet และ Web
    • HTML
  • Computer Language
    • Basic Computer Language (LV.1)
    • C Language (LV.1)
    • Python3 (LV.1)
  • Operating System
    • Linux
      • Basic Linux (LV.1)
  • TOOLS
    • Text Editor
      • Vim Editor
    • Source Control
      • GitLab
        • GitLab for small site (LV.1)
    • Container
      • Docker
        • Docker (LV.1)
        • Docker (LV.2)
      • Kubernetes
        • Kubernetes Intro (LV.0)
        • Kubernetes Basic (LV.1)
        • Kubernetes Intermediate (LV.2)
        • Helm (LV.2)
        • RKE2 (LV.3)
        • K3S (LV.3)
        • K3D (LV.3)
    • Repository
      • Harbor
        • Harbor for small site (LV.1)
        • Harbor for enterprise (LV.2)
    • Database
      • Redis
        • Redis on Docker Compose (LV.1)
        • Redis on Kubernetes (LV.2)
      • Elastic Stack
        • Elasticsearch & Kibana for small site (LV.1)
    • Observability
      • Prometheus
        • Prometheus for small site (LV.1)
        • Prometheus Operator (LV.2)
    • Security
      • Certbot (LV.1)
      • Falco
      • Hashicorp Vault
    • Collaboration
      • Nextcloud
Powered by GitBook
On this page
  • Bit และ Byte
  • Interpreter และ Compiler
  • Just-In-Time Compilation

Was this helpful?

  1. Computer Language

Basic Computer Language (LV.1)

พื้นฐานก่อนเรียนภาษาคอมพิวเตอร์

PreviousHTMLNextC Language (LV.1)

Last updated 6 months ago

Was this helpful?

Bit และ Byte

คอมพิวเตอร์ถูกออกแบบมาให้ทำงานบนระบบเลขฐานสอง ซึ่งเป็นเลขฐานที่เล็กที่สุด เพื่อง่ายต่อการออกแบบวงจรไฟฟ้า เช่น มีแรงดันไฟฟ้า = 1 ไม่มีแรงดันไฟฟ้า = 0

เลขฐานสองเพียงหลักเดียว เราเรียกว่า Bit แต่เลขฐานสองเพียงหลักเดียว ไม่เพียงพอต่อการแทนที่ตัวอักษรที่เราใช้กันได้ทั้งหมด จึงมีการใช้เลขฐานสองหนึ่งชุด ซึ่งมีจำนวน 8 หลัก มาแทนแต่ละตัวอักษร 28=2562^8 = 25628=256 ความเป็นไปได้ทั้งหมด 256 แบบ สามารถแทนที่อักษร 0-9, a-z, A-Z และเครื่องหมายอื่นๆ ได้เพียงพอ เราเรียกเลขฐานสองจำนวน 1 ชุดนี้ เราเรียกว่า Byte

Interpreter และ Compiler

คอมพิวเตอร์ทำงานด้วยเลขฐานสอง จึงต้องมีการแปลชุดคำสั่งที่เราเขียนเป็นภาษาที่คอมพิวเตอร์เข้าใจ (Computer Language) ก่อน ภาษาที่เราเขียนอาจจะเป็น BASIC, PASCAL, C/C++, Ada, COBOL, Java หรืออื่นๆ แต่ละภาษาอาจจะมีรูปแบบการแปลที่แตกต่างกัน ซึ่งรูปแบบการแปล แบ่งได้เป็น

  • Interpreter - มีการแปลทีละคำสั่ง และคอมพิวเตอร์นำไปทำงานทันที

  • Compiler - จะแปลทุกคำสั่งให้เสร็จก่อน เก็บเป็นไฟล์ แล้วจึงนำไฟล์ไปทำงาน

พฤติกรรมดังกล่าวทำให้ Compiler ใช้เวลาในการแปลคำสั่งนานกว่า เพราะต้องแปลให้เสร็จทั้งหมดก่อน จึงจะนำไปทำงานได้ แต่ในขณะที่โปรแกรมทำงาน Compiler จะทำงานได้ไวกว่า เพราะไม่ต้องนำไปแปลอีกต่อไป ในเชิงความเร็วแล้ว จึงสรุปได้ว่า Compiler มีความเร็วมากกว่า Interpreter

จุดเด่นหนึ่งที่ Interpreter เหนือกว่า Compiler คือการนำโปรแกรมไปใช้บนระบบที่มี CPU Architecture ที่ต่างกันออกไป เพราะโปรแกรมแบบ Compiler นั้น เมื่อแปลแล้ว ไฟล์คำสั่งจะผูกติดกับ CPU Architecture ของระบบที่ใช้แปล ทำให้ไม่สามารถนำไฟล์ที่แปลแล้ว ไปทำงานบนระบบที่ใช้ CPU Architecture อื่นได้ แต่ Interpreter จะแปลทีละคำสั่งในตอนใช้งาน จึงทำให้ไม่ผูกติดกับ CPU Architecture ทำให้เริ่มการทำงานได้ไวกว่า

ในด้านการแสดงข้อผิดพลาดของโปรแกรมนั้น Compiler จะแปลทั้งโปรแกรมจนหมดก่อน แล้วจึงแสดงข้อผิดพลาดทั้งหมดออกมา ในขณะที่ Interpreter จะทำงานทีละบรรทัด และหยุดทันทีที่เจอบรรทัดที่ผิดพลาด

Just-In-Time Compilation

เนื่องจากทั้ง Compiler และ Interpreter ต่างก็มีจุดเด่นในตัวเอง เพื่อลดจุดด้อยในแบบต่างๆ จึงเกิดรูปแบบการแปลภาษาแบบใหม่ ที่เรียกว่า Just-in-time compilation

เป็นการแปลภาษาที่คล้าย Interpreter โดยจะอ่านโปรแกรมมาแปลก่อนเริ่มทำงาน โดยจะแปลเป็นภาษาซึ่งเรียกว่า Bytecode ก่อน และ Bytecode จะถูก Runtime Engine บนระบบนำไปแปลเป็น Machine Language และทำงานตาม CPU Architecture ของตนเอง หากมีการทำงานที่เรียกส่วนเดิมซ้ำ เช่นเรียก function เดิมซ้ำ (โดยอาจมี argument ที่ต่างออกไป) โปรแกรมจะใช้ Bytecode ที่แปลไว้แล้ว ทำให้ขั้นตอนการแปลลดลง จึงไวกว่า Interpreter

ตัวอย่างของ Runtime ที่ใช้ JIT คือ

  • JVM - รองรับภาษา Java และ JavaScript

  • CLR - รองรับพวก .NET

  • Node JS - JavaScript

  • PHP8

Bit และ Byte