Skip to main content

Posts

Showing posts from June, 2023

CPU chạy thread hay process?

Hay những câu hỏi liên quan: Thread và process khác gì nhau? 1 process chạy multithreading trên mấy CPU? Vì sao Java, Rust không nhắc tới multiprocessing? Khi chạy CPU bound, dùng multi-process hay multi-threaded? bài này sẽ làm cho ra nhẽ. Việc khó khăn nhất khi trả lời các câu hỏi này là tìm được các tài liệu có tính "chuẩn mực"/căn cứ, không phải mấy trang tutorial, wikipedia hay hỏi đáp trên mạng. Process là gì, thread là gì Người dùng máy tính thường biết đến khái niệm process trước, nó hiển thị mặc định trên các chương trình process manager như top , hay ps , hay Monitor trên Ubuntu, hay cả Task manager trên Windows. Mỗi process được gán cho 1 số ProcessID (PID), dùng lệnh kill -9 PID để tắt chương trình bị "treo". Khi chạy 1 chương trình, hệ điều hành sẽ tạo ra 1 (hay vài) process. Cho tới khi học lập trình Python, thấy mỗi chương trình chỉ chạy code tuần tự từ trên xuống, nhận ra rằng mỗi 1 process chỉ chạy 1 "luồng" (thread), học t...

ps và top hiển thị số thread

Người dùng Linux hẳn đều biết dùng lệnh ps -ef hay top để xem các "chương trình" đang chạy. Chương trình trên Linux thường ám chỉ 1 (vài) process đang chạy, mỗi process được gắn số ProcessID (PID). Một process có thể chạy nhiều OS thread, để xem số lượng thread (NLWP) hay thread ID (LWP), thêm option -L Xem thread với ps $ ps -efL | grep python3 # Dòng này được thêm vào cho dễ hiểu UID PID PPID LWP C NLWP STIME TTY TIME CMD -------------------------------------------------------------------------------- hvn 3818 1585 3818 0 2 21:28 pts/0 00:00:00 python3 main.py hvn 3818 1585 3819 0 2 21:28 pts/0 00:00:00 python3 main.py PID là 3818, 2 thread ID lần lượt là 3818 và 3819. Code Python3 import time from threading import Thread class MyThread(Thread): def run(self): while True: time.sleep(2) print("running") t = MyThread() t.start() t.join() Xem thread vớ...

Thảm họa PyYAML

PyYAML, thư viện parse YAML phổ biến bậc nhất của Python, được dùng trong các phần mềm dùng YAML như Ansible, SaltStack, ... > YAML: YAML Ain't Markup Language™ Ví dụ Salt state: install_network_packages: pkg.installed: - pkgs: - rsync - lftp - curl Mặc định nguy hiểm YAML không phải một ngôn ngữ/format đơn giản như JSON, nó có hàng tá tính năng mà có thể bạn không biết tới. Dùng YAML giống như dùng pickle hơn là json (có thể chứa object tùy ý). def double(x): return x+x import sys yaml.dump(double, sys.stdout) # !!python/name:__main__.double '' Function mặc định (và siêu phổ biến) để đọc file YAML: yaml.load , có thể chạy code Python, và là tác giả của hàng loạt lỗ hổng bảo mật được gắn CVE: CVE-2017-18342 In PyYAML before 5.1, the yaml.load() API could execute arbitrary code if used with untrusted data. The load() function has been deprecated in version 5.1 and the 'UnsafeLoader' has been introduced for backward compati...

Popular posts from this blog

Tài liệu và hướng dẫn học Python

Để tiết kiệm thời gian, tốt nhất là đi học PyMI Updated: 130617 Sau đây là các tài liệu khuyên dùng: Vì nhiều lý do, nên học python2.7 tại thời điểm hiện tại (giờ là tháng 6/2013 - muốn biết tại sao thì tự tìm hiểu) python 3.5+ (giờ là tháng 2/2017) Chuẩn bị: 1. biết bật tắt máy 2. biết cài python 3. tập gõ 10 ngón - gõ 2 ngón hay 1 ngón cũng không sao, nhưng 10 ngón là cách dễ nhất để gõ nhanh nhất. Tài liệu - Nên dùng tài liệu tại trang chủ của Python làm chính, tham khảo thêm các tài liệu khác tại http://www.familug.org/2016/12/free-ebook.html Căn bản, mới học 1.1 Python PyMI.vn https://pymi.vn/tutorial/ 1.2. Python offical tutorial kết hợp làm bài tập trên HackerRank  (đề bài bằng tiếng Anh, nhưng Google translate 1 lúc cũng ra vì có nhiều ví dụ mẫu đi kèm). Học viên của Pymi.vn có rất nhiều học viên đã tự học với Learn Python the hard way nhưng chưa thấy ai thành công cả. Hai link dưới nên đọc sau khi đã nắm được những phần cơ bản của ngôn ngữ pytho...

The PyMiers

New FAMILUG