Nghiên cứu cơ chế lập trình tương tranh cho ngôn ngữ lập trình hàm SML Nghiên cứu cơ chế lập trình tương tranh cho ngôn ngữ lập trình hàm SML Nghiên cứu cơ chế lập trình tương tranh cho ngôn ngữ lập trình hàm SML luận văn tốt nghiệp,luận văn thạc sĩ, luận văn cao học, luận văn đại học, luận án tiến sĩ, đồ án tốt nghiệp luận văn tốt nghiệp,luận văn thạc sĩ, luận văn cao học, luận văn đại học, luận án tiến sĩ, đồ án tốt nghiệp
TRẦN NHẬT HÓA BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI - Trần Nhật Hóa CƠNG NGHỆ THƠNG TIN NGHIÊN CỨU CƠ CHẾ LẬP TRÌNH TƯƠNG TRANH CHO NGƠN NGỮ LẬP TRÌNH HÀM SML# LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN 2006-2008 HÀ NỘI – 2008 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI - TRẦN NHẬT HÓA NGHIÊN CỨU CƠ CHẾ LẬP TRÌNH TƯƠNG TRANH CHO NGƠN NGỮ LẬP TRÌNH HÀM SML# Chuyên ngành: CÔNG NGHỆ THÔNG TIN LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN NGƯỜI HƯỚNG DẪN KHOA HỌC: TS NGUYỄN HỮU ĐỨC HÀ NỘI – 2008 i LỜI CAM ĐOAN Tôi xin cam đoan Luận văn cơng trình nghiên cứu khoa học riêng tơi, khơng chép cơng trình ii MỤC LỤC LỜI CAM ĐOAN i MỤC LỤC ii DANH MỤC CÁC BẢNG .iii DANH MỤC CÁC HÌNH iv DANH MỤC CÁC TỪ VIẾT TẮT v CHƯƠNG ĐẶT VẤN ĐỀ 1.1 Giới thiệu 1.2 Nội dung nghiên cứu đề tài 1.3 Phương pháp nghiên cứu đề tài 1.4 Các bước thực đề tài 1.5 Kết cấu Luận văn CHƯƠNG NGÔN NGỮ LẬP TRÌNH HÀM SML# 2.1 Giới thiệu 2.2 Lớp ngôn ngữ SML (Standard Metalanguage) 10 2.3 Ngôn ngữ SML# 19 CHƯƠNG KỸ THUẬT LẬP TRÌNH TƯƠNG TRANH 25 3.1 Lập trình tương tranh (Concurrent Programming) 25 3.2 Một số vấn đề tương tranh 28 3.3 Các cách tiếp cận tương tranh số ngôn ngữ lập trình 36 CHƯƠNG XÂY DỰNG CƠ CHẾ LẬP TRÌNH TƯƠNG TRANH 52 4.1 Thiết kế hệ thống biên dịch hỗ trợ lập trình đa luồng SML# 52 4.2 Thiết kế hệ thống thực thi hỗ trợ lập trình đa luồng SML# 61 CHƯƠNG KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 78 5.1 Những kết đạt đóng góp Luận văn 78 5.2 Hướng phát triển Luận văn 79 DANH MỤC CÁC THUẬT NGỮ 80 TÀI LIỆU THAM KHẢO 82 iii DANH MỤC CÁC BẢNG BẢNG TRANG Bảng 4.1 Một số lệnh thực thi máy ảo SML# 57 Bảng 4.2 Các bước biên dịch SML# .60 iv DANH MỤC CÁC HÌNH HÌNH TRANG Hình 3.1 Các mơ hình kết hợp tiến trình luồng .30 Hình 3.2 Mơ hình tiến trình đơn luồng tiến trình đa luồng 31 Hình 3.3 Wait set 39 Hình 3.4 Các thơng điệp Mailbox 44 Hình 3.5 Kiến trúc Heap Manticore .50 Hình 4.1 Ví dụ minh họa thực thi đa luồng 54 Hình 4.2 Các mơ đun q trình biên dịch 59 Hình 4.3 Mơ hình tổ chức máy ảo SML# .62 Hình 4.4 Mơ hình tổ chức máy ảo 63 Hình 4.5 Mơ hình nhớ SML# 63 Hình 4.6 Mơ hình nhớ thực thi đa luồng 64 Hình 4.7 Cài đặt ghi máy ảo SML# .65 Hình 4.8 Lớp Session 66 Hình 4.9 Các bước khởi tạo Session .67 Hình 4.10 Cấu trúc Executable .67 Hình 4.11 Các bước thực thi máy ảo 68 Hình 4.12 Quá trình khởi tạo máy ảo thực thi đa luồng .69 Hình 4.13 Phương thức khởi tạo luồng 70 Hình 4.14 Các bước khởi tạo luồng 71 Hình 4.15 Thuật tốn GC 74 Hình 4.16 Xử lý ngoại lệ 77 v DANH MỤC CÁC TỪ VIẾT TẮT CML Concurrent ML GC Garbage Collection JVM Java Virtual Machine ML Metalanguage SML Standard Metalanguage SML/NJ Standard ML of New Jersey VM Virtual Machine CHƯƠNG ĐẶT VẤN ĐỀ 1.1 Giới thiệu Trong giới thông tin ngày nay, phát triển mạnh mẽ ứng dụng song song phân tán kéo theo nhu cầu cấp thiết tảng phát triển phần mềm để đảm bảo tính hiệu cho ứng dụng Với mục đích phục vụ tốt cho người sử dụng, phần mềm phải đảm bảo hiệu cao hợp lý việc sử dụng tài nguyên Công nghệ mạng hay gần cơng nghệ chế tạo chíp đa lõi (multicore) coi hạ tầng cần thiết cho tảng Tuy nhiên, nhắc đến ứng dụng song song hay phân tán, ta không đề cập đến ngơn ngữ lập trình sử dụng để phát triển ứng dụng Ngơn ngữ hỗ trợ lập trình song song phân tán (gọi tắt ngôn ngữ lập trình song song) khơng phải giúp lập trình viên chuyển tải ý tưởng thiết kế thành phần mềm mà phải đảm bảo phần mềm thực thi hiệu hạ tầng tính tốn sử dụng Một ngơn ngữ lập trình song song tốt phải hướng đến việc cung cấp chế song song hóa nhiều cấp độ khác Thơng thường, tính song song thể ba cấp độ, [FF+07]: - Song song hóa ẩn (implicit parallelism): đó, trình biên dịch tự động phân chia cơng việc song song hóa chúng cách thực thi luồng tính tốn (thread) khác - Phân luồng ẩn (implicit threading): đó, người lập trình cần cung cấp thơng tin có ích cho việc song song hóa Tuy nhiên, việc phân chia công việc ánh xạ chúng lên luồng tính tốn giao phó cho trình biên dịch - Phân luồng tường minh (explicit threading): đó, người lập trình phải tự phân chia cơng việc ánh xạ chúng lên luồng tính tốn chương trình Trên thực tế, phần lớn ngơn ngữ hỗ trợ mức phân luồng tường minh Các ngơn ngữ lập trình thị (imperative) C hay Java khó cài đặt chế song song hóa tự động đặc trưng ngơn ngữ (sự phụ thuộc thứ tự thực chặt chẽ chế thị) Ta phân tích khả song song hóa lớp ngơn ngữ lập trình hàm Với cách tiếp cận dựa lời gọi hàm, lập trình hàm mơ hình lập trình dạng khai báo (Declarative Programming) xây dựng dựa sở định giá biểu thức toán học mà bỏ qua trạng thái liệu thay đổi (mutable data) [HPa89] Việc tính tốn biểu thức tốn học thực cách đánh giá độc lập biểu thức sau kết hợp giá trị chúng Đây yếu tố quan trọng cho việc song song hóa tự động Ngồi ra, với việc khơng sử dụng khái niệm biến nên người lập trình khơng cần phải quan tâm đến thao tác đọc ghi Trong bối cảnh lập trình tương tranh, điều giúp người lập trình tránh khỏi phức tạp việc xử lý xung đột truy cập tài nguyên Những đặc điểm cho thấy ngơn ngữ lập trình hàm tỏ phù hợp với mơ hình lập trình tương tranh Thực tế là, số ngơn ngữ lập trình hàm như: Erlang SML/NJ bước đầu xây dựng chế lập trình Tuy nhiên, thực tiễn cho thấy ngơn ngữ lập trình hàm khơng áp dụng phổ biến phát triển ứng dụng Nếu bỏ qua yếu tố thói quen lập trình hai nguyên nhân thực trạng hiệu (hiệu ứng dụng thấp) khả tương tác yếu (chia sẻ thư viện) với ngôn ngữ khác Dự án xây dựng ngôn ngữ SML# [SP07] đời nhằm mục tiêu khắc phục nhược điểm Tuy nhiên, phiên SML# chưa hỗ trợ chế lập trình tương tranh Xuất phát từ điều đó, Luận văn tham vọng xây dựng ngơn ngữ lập trình hàm có hỗ trợ song song hóa nhiều cấp, đồng thời có tính tương tác mạnh ngơn ngữ lập trình khác Trong bước tiếp cận đầu tiên, Luận văn tập trung vào việc giải chế lập trình tương tranh cho SML# mức độ hỗ trợ cấp ngôn ngữ (explicit parallelism) Với mục tiêu nói trên, Luận văn nghiên cứu đề xuất hệ thống thực thi đa luồng cho SML# theo mô hình nhớ chia sẻ Mỗi luồng thực thi không gian riêng với hệ thống ngăn xếp (stack) riêng ghi (register) riêng Mã thực thi luồng đặt đệm lệnh (code buffer) chung Các đối tượng phức hợp tạo luồng cấp phát vùng nhớ (heap) 1.2 Nội dung nghiên cứu đề tài Trong khuôn khổ luận văn thạc sĩ, đề tài giới hạn nghiên cứu lập trình tương tranh ngơn ngữ lập trình hàm SML# Cụ thể, nội dung, Luận văn tập trung vào: - Nghiên cứu lập trình hàm nói chung xem xét cụ thể với ngơn ngữ lập trình hàm SML# - Nghiên cứu hệ thống biên dịch hệ thống thực thi ngơn ngữ lập trình - Nghiên cứu kỹ thuật lập trình tương tranh cách tiếp cận lập trình tương tranh số ngơn ngữ hỗ trợ - Đề xuất chế lập trình tương tranh thơng qua việc sửa đổi hệ thống biên dịch hệ thống thực thi ngôn ngữ lập trình hàm SML# 70 ảo - Các thao tác máy ảo là: Đọc cấu trúc Excecutable (chứa mã thực thi), khởi tạo luồng (Main Thread) chương trình đăng kí luồng vào lập lịch - Tiếp đó, thành phần lập lịch định hoạt động luồng máy ảo - Từ luồng ban đầu chương trình, ta khởi tạo luồng Từ luồng lại khởi tạo luồng khác tiếp tục (Hình 4.13) Luồng ban đầu Khởi tạo luồng Khởi tạo luồng Khởi tạo luồng Các luồng Hình 4.13 Phương thức khởi tạo luồng Quá trình khởi tạo luồng phải trải qua bước sau (Hình 4.14): Khởi tạo ngăn xếp cho luồng Khởi tạo trỏ đến ngăn xếp, đếm chương trình biến mơi trường (SP, PC, ENV) Đăng ký luồng vào lập lịch 71 Nhận giá trị định danh tương ứng cho luồng Khởi tạo Stack Khởi tạo SP, PC ENV Đăng ký vào lập lịch Nhận giá trị Tid Hình 4.14 Các bước khởi tạo luồng 4.2.5 Cơ chế lập lịch Việc lập lịch hoạt động cho luồng máy ảo thực theo hình thức vịng trịn (Round Robin) Trong đó, lập lịch (Scheduler) chứa danh sách luồng xếp theo thứ tự thực Tại thời điểm, có luồng hoạt động thực khoảng thời gian định Sau khoảng thời gian này, lập lịch thực việc chuyển đổi hoạt động từ luồng sang luồng khác Để thực điều đó, thành phần lập lịch cần cài đặt định thời (Timer) giúp cho việc xác định thời gian cần thiết cho hoạt động chuyển đổi Khi việc chuyển đổi xảy luồng thứ i j máy ảo, cơng việc cần thiết là: lưu tồn trạng thái hoạt động luồng thứ i (là luồng tại); sau đó, nhận trạng thái hoạt động trước luồng j kích hoạt luồng hoạt động Cài đặt vòng lặp executeLoop máy ảo trước (đã đề cập Mục 4.2.4) đặt vào thành phần Thread dạng hàm Thread.executeLoop() Theo đó, thao tác tiến hành nhận lệnh, giải mã quản lý đối tượng Thread Việc thực thi hồn tồn tương tự mơ hình đơn luồng 72 - Quá trình hoạt động luồng diễn sau: Đầu tiên, luồng khởi tạo lệnh FORK (FORK f, tid) từ luồng (ban đầu MainThread chương trình) Theo đó, đăng ký vào lập lịch chờ thành phần định khoảng thời gian hoạt động Hoạt động luồng tiến hành gặp lệnh EXIT luồng khác gọi đến hàm EXITTHREAD để cưỡng luồng kết thúc Lúc đó, thao tác dọn dẹp tiến hành, bao gồm: - Loại bỏ luồng lập lịch (Scheduler.detachThread(tid)) - Giải phóng phần nhớ mà luồng sử dụng, cụ thể thành phần Operation Stack Exception Stack Tuy nhiên, vùng nhớ cấp phát Heap quản lý hồn tồn tự động nên khơng phải thực thao tác dọn dẹp vùng 4.2.6 Quản lý nhớ GC (Garbage Collection) Trong SML#, việc quản lý nhớ thực hoàn toàn tự động thông qua Garbage Collection (GC) cài đặt giải thuật generational GC Theo giải thuật này, máy ảo SML# xác định ba vùng nhớ chính, là: youngerRegion_, elderFromRegion_ elderToRegion_ static HeapRegion youngerRegion_; static HeapRegion elderFromRegion_; static HeapRegion elderToRegion_; Thơng thường, việc kích hoạt GC thực cưỡng trường hợp nhớ bị cạn kiệt Đối với SML#, thao tác diễn khơng cịn đủ nhớ phục vụ cho hoạt động máy ảo Lúc đó, xuất phát từ thành phần Rootset (chứa trỏ tới thành phần Globals, ENV Stack), khối nhớ duyệt theo chiều rộng 73 Những phần sử dụng vùng elderFromRegion_ chép sang vùng elderToRegion_ Theo đó, khối nhớ không tham chiếu phát giải phóng Khi q trình kết thúc, vùng nhớ hoán chuyển sau: - youngerRegion_ hoán chuyển thành elderFromRegion_ - elderFromRegion_ thành elderToRegion_, - elderToRegion_ thành elderFromRegion_ 74 youngerRegion_ elderFromRegion_ elderToRegion_ Rootset Vùng nhớ khơng cịn sử dụng loại bỏ Heap Hình 4.15 Thuật tốn GC Các thao tác giải thuật minh họa Hình 4.15 Gồm bước: Sao chép khối nhớ từ elderFromRegion_ sang elderToRegion_ Liên kết khối nhớ vừa chép với khối nhớ gốc trước đó, gọi Forward Pointer (con trỏ ngược) 75 Chuyển liên kết Rootset sang khối nhớ vừa chép Trong việc thực thi đa luồng, cách thức quản lý nhớ tự động giải cách tương tự Điểm khác biệt thành phần RootSet chứa trỏ đến tất khối nhớ cho luồng Thao tác theo giải thuật generational GC đảm bảo khối nhớ không sử dụng giải phóng 4.2.7 Quản lý ngoại lệ Ở mơ hình SML# tại, ngoại lệ nắm bắt thông qua ngăn xếp Exception Stack Với thực thi đa luồng, việc nắm bắt ngoại lệ luồng tiến hành cách độc lập Mỗi luồng có ngăn xếp ngoại lệ riêng Việc xử lý ngoại lệ giới hạn luồng Khi có xử lý ngoại lệ (Handler) cho hàm đó, Exception Stack tiếp nhận phần tử ghi nhận thông tin Stack Frame (SP) địa quay lại Stack Frame dành cho hàm Trong trường hợp thao tác hàm làm phát sinh ngoại lệ tương ứng phần tử ngăn xếp lấy để giúp cho hàm quay địa phần xử lý ngoại lệ Ta xem xét ví dụ sau: Chương trình bao gồm ba hàm: f1, f2 f3 Trong đó: - f1 gọi đầu tiên, - f1 gọi f2 - f2 gọi đến f3 Trong ba hàm có f3 làm phát sinh ngoại lệ EXN_1 Tuy nhiên, ngoại lệ nắm bắt hàm f1, xử lý thành phần e’ 76 Đoạn mã minh họa: fun f1 = ( ; f2 x; handle EXN_1 -> e’ ) fun f2 x = ( f3 x ) fun f3 x = ( raise EXN_1 ) Quá trình thực chương trình (Hình 4.16) sau: - Mỗi hàm f1, f2, f3 cấp phát StackFrame theo thứ tự thực chúng OperationStack Trong f1 có handle cho ngoại lệ EXN_1 nên trình thực Exception Stack nhận phần tử xác định thành phần xử lý (Handle) cho ngoại lệ - Khi thực đến hàm f3 (tương ứng với StackFrame cùng), chương trình làm phát sinh ngoại lệ EXN_1 Tại thời điểm này, chương trình lấy phần tử Exception Stack để giúp cho xác định địa thành phần xử lý ngoại lệ e’ - Theo đó, chương trình khơi phục lại trỏ ngăn xếp (Stack Pointer) nhảy đến địa phần xử lý Việc xử lý ngoại lệ kết thúc 77 Operation Stack Exception Stack (a) Ban đầu SP Operation Stack Exception Stack (b) call f1 PUSH EXNInfo (add e’) Operation Stack Exception Stack Operation Stack Exception Stack (d) call f2 (c) handle POP EXNInfo Operation Stack Exception Stack (e) call f3 Operation Stack Exception Stack (f) raise EXN_1 - hồi phục SP - JUMP add Hình 4.16 Xử lý ngoại lệ 78 CHƯƠNG KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 5.1 Những kết đạt đóng góp Luận văn - Kết đạt Trên sở mục tiêu đặt ra, Luận văn đạt số kết quả, cụ thể là: - Nghiên cứu tổng quan lập trình hàm ngơn ngữ SML#; - Nghiên cứu lập trình tương tranh cách tiếp cận tương tranh số ngôn ngữ hỗ trợ như: Java, SML/NJ, Erlang, CML,… - Nghiên cứu phần cài đặt cụ thể ngôn ngữ lập trình SML# đề xuất mơ hình lập trình tương tranh phù hợp với ngơn ngữ lập trình - Những đóng góp Luận văn Đề xuất mơ hình tương tranh ngơn ngữ lập trình hàm có tính tương tác mạnh SML# Cụ thể tổ chức lại hệ thống biên dịch thực thi ngơn ngữ để thực chế lập trình tương tranh, bao gồm: - Đề xuất thay đổi cần thiết cho ngôn ngữ nguồn, ngơn ngữ đích kiến trúc biên dịch ngơn ngữ SML#; - Thiết lập mơ hình máy ảo SML# cho phép thực thi đa luồng; - Tổ chức lại mơ hình nhớ SML#; - Tổ chức ghi cho hoạt động luồng; - Thiết lập chế thực thi đa luồng; - Xây dựng chế quản lý ngoại lệ 79 5.2 Hướng phát triển Luận văn Bước đầu nghiên cứu lập trình tương tranh, Luận văn tiếp cận mức phân luồng tường minh ngôn ngữ lập trình hàm SML#, chưa thực phân luồng ẩn chưa thực đồng hóa luồng Trong tương lai, Luận văn phát triển theo hướng: - Thực đồng hóa giao tiếp luồng; - Thiết lập kênh giao tiếp (Channel) để trao đổi thơng tin luồng; - Xây dựng hộp thư (mailbox) để lưu trữ thông điệp gửi qua lại luồng; - Cài đặt hình thức giao tiếp chia sẻ nhớ theo chế khóa (lock); - Cài đặt thử nghiệm mơ hình đề xuất; - Cài đặt song song hóa mức cao như: phân luồng ẩn 80 DANH MỤC CÁC THUẬT NGỮ Thuật ngữ Nghĩa Asynchronous Không đồng Concurrent process Tiến trình đồng thời Concurrent Programming Lập trình tương tranh Concurrent programming language Ngơn ngữ lập trình tương tranh Context switch Chuyển đổi ngữ cảnh Declarative Programming Lập trình khai báo Distributed program Chương trình phân tán Explicit threading Phân luồng tường minh Functional Programming Lập trình hàm Garbage collection Quản lý nhớ tự động Imperative Programming Lập trình thị Implicit parallelism Song song ẩn Implicit threading Phân luồng ẩn Mailbox Hộp thư Message passing Truyền thông điệp Multiprocessing Đa xử lý Multiprocessing operating system Hệ điều hành đa xử lý Multiprogramming Đa lập trình Mutable data Dữ liệu thay đổi Mutable object Đối tượng thay đổi Object-oriented programming Lập trình hướng đối tượng 81 Parallel programming Lập trình song song Parallel programming language Ngơn ngữ lập trình song song Pattern-matching Khớp mẫu Polymorphic Đa hình Process Tiến trình Scheduler Bộ lập lịch Shared memory Chia sẻ nhớ Synchronous Đồng Synchronous object Đối tượng đồng System process Tiến trình hệ thống User process Tiến trình người dùng Virtual Processor Bộ xử lý ảo 82 TÀI LIỆU THAM KHẢO [Be08] Jost Berthold (2008) - Explicit and Implicit Parallel Functional Programming: Concepts and Implementation [BFr99] Christey Bahn, Kim Fryer (1999) - Microsoft Computer Dictionary, Fourth Edition, PUBLISHED BY Microsoft Press [CTa06] Richard H Carver, Kuo-Chung Tai (2006) – Modern Multithreading Implementing, Testing, and Debugging Multithreaded Java and C++/Pthreads/Win32 Programs, JOHN WILEY & SONS, INC., PUBLICATION [FF+07] Matthew Fluet, Nic Ford, Mike Rainey, John Reppy, Adam Shaw, Yingqi Xiao (2007) - Status Report: The Manticore Project (http://manticore.cs.uchicago.edu) [FRR+] Matthew Fluet, Mike Rainey, John Reppy, Adam Shaw Implicitly-threaded Parallelism in Manticore [Fu99] Guangrui Fu (1999) - Design and implementation of an operating system in Standard ML [Har99] Robert Harper (1999) – Programming Languages, The Implementation of Concurent ML [HPa89] Hudak, Paul (1989) - Conception, evolution, and application of functional programming languages [JAr07] Joe Armstrong (2007) – Programming Erlang Software for a 83 Concurrent World 10 [JCM03] John C Mitchell (2003) – Concepts in Programming Languages, ISBN:0521780985, Cambridge University Press 11 [JRe07] John Reppy (2007) - The Manticore Project (Status Report), University of Chicago http://manticore.cs.uchicago.edu 12 [LB96] Bil Lewis, Daniel J Berg (1996) - PThreads Primer - A Guide to Multithreaded Programming 13 [LCP96] Lawrence C Paulson (1996) – ML for the working programmer, 2nd Edition, University of Cambridge 14 [ONo99] Atsushi Ohori, Nobuaki YoshidaType (1999) - Inference with Rank Polymorphism for Type-Directed Compilation of ML, ACM Press 15 [Pfe02] Frank Pfenning (2002) - Supplementary Notes on Concurrent ML 16 [Rep91] J Reppy (1991) - CML: a Higher-Order Concurrent Language 17 [RP04] Riccardo Pucella (2004) - Higher-Order Concurrent Win32 Programming, Bell Laboratories Lucent Technologies riccardo@research.bell-labs.com 84 18 [RPi00] Rob Pike (2000) - Introduction to Concurrent Programming, Computing Sciences Research Center, Bell Labs, Lucent Technologies 19 [RXi07] John Reppy, Yingqi Xiao (2007)- Specialization of CML message-passing primitives, University of Chicago 20 [RXi08] John Reppy, Yingqi Xiao (2008) - Toward a parallel implementation of Concurrent ML, University of Chicago 21 [SP07] 2007 - SML# Project http://www.pllab.riec.tohoku.ac.jp/smlsharp/ 22 [SPS08] Y.N Srikant Priti Shankar (2008) - The COMPILER DESIGN Handbook Optimizations and Machine Code Generation, SECOND EDITION 23 [SSe03] Prof Sanjeev Setia (2003)– Concurrent Programming 24 [Sun94] Sun Microsystems (1994) - Multithreaded Programming Guide ... chung lập trình hàm Đưa nội dung, cách tiếp cận bước thực để giải chế lập trình tương tranh ngơn ngữ lập trình hàm SML# Chương Ngơn ngữ lập trình hàm SML# Giới thiệu tổng quan lập trình hàm, tập... trình hàm nói chung xem xét cụ thể với ngơn ngữ lập trình hàm SML# - Nghiên cứu hệ thống biên dịch hệ thống thực thi ngôn ngữ lập trình - Nghiên cứu kỹ thuật lập trình tương tranh cách tiếp cận lập. .. thực đề tài, trình nghiên cứu triển khai qua bước sau: - Nghiên cứu tổng quan lập trình hàm, xem xét đặc trưng ngôn ngữ SML# - Nghiên cứu cách tiếp cận lập trình tương tranh số ngơn ngữ có hỗ trợ