Tải bản đầy đủ (.pdf) (70 trang)

Ứng dụng công nghệ mysql và lập trình socket tcp nhằm song song hóa một số kỹ thuật toán trên đồ thị

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.63 MB, 70 trang )

Trang 1

ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC SƯ PHẠM
KHOA TIN
----------

NGUYỄN MẬU TUỆ

NGHIÊN CỨU THUẬT TỐN SONG SONG

KHĨA LUẬN TỐT NGHIỆP

Luận văn tốt nghiệp


Trang 2

MỤC LỤC
MỞ ĐẦU .......................................................................................................................5
1.

Bối cảnh thực tế ............................................................................................................ 5

2.

Mục tiêu nghiên cứu ..................................................................................................... 5

3.

Phương pháp nghiên cứu .............................................................................................. 6



4.

Đối tượng nghiên cứu ................................................................................................... 7

5.

Phạm vi nghiên cứu ...................................................................................................... 7

6.

Nội dung nghiên cứu..................................................................................................... 7

7.

Cấu trúc báo cáo ........................................................................................................... 7

CHƯƠNG 1 - LÝ THUYẾT XỬ LÝ SONG SONG ....................................................8
1.1. Kiến trúc và các loại máy tính song song ..................................................................... 8
1.1.1. Kiến trúc máy tính ................................................................................................. 8
1.1.2. Phân loại máy tính song song ................................................................................ 8
1.1.3. Mơ hình trừu tượng của máy tính song song ....................................................... 11
1.2. Một số mơ hình lập trình song song thơng dụng ........................................................ 12
1.2.1. Mơ hình chia sẽ khơng gian bộ nhớ ..................................................................... 12
1.2.2. Mơ hình truyền thơng điệp .................................................................................. 12
1.2.3. Cấu trúc của những chương trình truyền thông điệp ........................................... 13
Luận văn tốt nghiệp


Trang 3

1.3. Thuật toán song song .................................................................................................. 14
1.3.1. Nguyên lý thiết kế thuật toán song song .............................................................. 14
1.3.2. Ba cách tiếp cận để thiết kế thuật toán song song ............................................... 15
1.3.3. Cách thức xây dựng một chương trình song song ............................................... 15

CHƯƠNG 2 - JDBC TRUY VẤN MYSQL VÀ LẬP TRÌNH SOCKET TCP .........17
2.1. JDBC........................................................................................................................... 17
2.1.1. Một số đặc điểm về JDBC ................................................................................... 18
2.1.2. Kiến trúc JDBC.................................................................................................... 18
2.1.3. Các lớp chủ yếu chịu trách nhiệm thiết lập kết nối ............................................. 23
2.1.4. Các Bước Cơ Bản Khi Làm Việc Với JDBC ...................................................... 24
2.2. Lập trình Socket TCP ................................................................................................. 28
2.2.1. Định nghĩa ........................................................................................................... 28
2.2.2. Mơ hình clients/server sử dụng socket ở chế độ hướng kết nối TCP .................. 29
2.2.3. Lập trình Socket TCP trong Java ......................................................................... 31

CHƯƠNG 3 - SONG SONG HÓA MỘT SỐ THUẬT TOÁN TRÊN ĐỒ THỊ .......34
3.1. THUẬT TOÁN DIJKSTRA ....................................................................................... 34
3.1.1. Phát biểu bài toán................................................................................................. 34
3.1.2. Xây dựng thuật tốn tuần tự tìm đường đi ngắn nhất trên đồ thị......................... 34
3.1.3. Song song hố thuật tốn tìm đường đi ngắn nhất trên đồ thị ............................. 35
3.1.4. Kết quả nghiên cứu .............................................................................................. 38
3.2. THUẬT TOÁN PRIM ................................................................................................ 42
3.2.1. Phát biểu bài toán................................................................................................. 42
3.2.2. Xây dựng thuật toán tuần tự tìm cây khung nhỏ nhất .......................................... 43
3.2.3. Song song hố thuật tốn tìm cây khung nhỏ nhất .............................................. 44
3.2.4. Kết quả nghiên cứu .............................................................................................. 47

KẾT LUẬN .................................................................................................................51
TÀI LIỆU THAM KHẢO ...........................................................................................52

PHỤ LỤC ....................................................................................................................53
6.1. Chương trình mơ phỏng thuật tốn Dijkstra tuần tự ................................................... 53
6.2. Chương trình mơ phỏng thuật tốn Dijkstra song song .............................................. 55
Luận văn tốt nghiệp


Trang 4
6.2.1. Server ................................................................................................................... 55
6.2.2. Client.................................................................................................................... 61
6.3. Chương trình mơ phỏng thuật tốn Prim tuần tự ........................................................ 64
6.4. Chương trình mơ phỏng thuật tốn Prim song song ................................................... 65
6.4.1. Server ................................................................................................................... 65
6.4.2. Client.................................................................................................................... 68

Luận văn tốt nghiệp


Trang 5

MỞ ĐẦU
1. Bối cảnh thực tế
Ngày nay, máy tính đã được sử dụng trong hầu hết các lĩnh vực và đã góp phần quan
trọng vào việc thúc đẩy sự phát triển kinh tế, xã hội, khoa học kỹ thuật, ... Đặc biệt, trong
lĩnh vực tính tốn, máy tính là công cụ không thể thiếu khi giải quyết những bài tốn địi
hỏi khối lượng tính tốn lớn, độ chính xác cao trong thời gian thực.
Với những bài toán lớn, việc tính tốn xử lý chỉ trên một bộ vi xử lý hoặc trên một
máy tính đã khơng thể đáp ứng được yêu cầu đặt ra, ví dụ: điều khiển các tàu vũ trụ, xử lý
thông tin về gen, điều khiển các lị phản ứng hạt nhân, ... Vì vậy, nhu cầu thực hiện tính
tốn song song để có thể tính tốn, giải quyết một vấn đề nào đó cùng lúc tại nhiều máy
tính khác nhau đã trở nên cấp thiết và đã được các nhà khoa học tập trung nghiên cứu.

Trong các ứng dụng thực tế, bài tốn tìm đường đi ngắn nhất giữa hai đỉnh của một
đồ thị liên thơng có một ý nghĩa to lớn. Ví dụ: Bài tốn chọn hành trình tiết kiệm nhất
(theo tiêu chuẩn khoảng cách, thời gian hoặc chi phí) trên một mạng giao thơng đường bộ,
đường thuỷ hoặc đường khơng; Bài tốn chọn một phương pháp tiết kiệm nhất để đưa
một hệ thống động lực từ trạng thái xuất phát đến một trạng thái đích; Bài tốn lập lịch thi
cơng các cơng đoạn trong một cơng trình thi cơng lớn; Bài tốn lựa chọn đường truyền tin
với chi phí nhỏ nhất trong mạng thơng tin, … Bài tốn trở nên phức tạp khi số lượng đối
tượng cần được xét duyệt tăng lên hàng triệu lần, địi hỏi khối lượng tính tốn lớn và việc
ứng dụng cơng nghệ tính tốn song song để tăng tốc thời gian xử lý.
2. Mục tiêu nghiên cứu
Tổng quát: Song song hóa một số thuật tốn trên đồ thị
Cụ thể:
 Nghiên cứu về tính tốn song song.
 Nghiên cứu về lập trình JBDC và lập trình socket TCP
 Xây dựng thuật tốn Dijkstra, Prim tuần tự và tìm ra tiến trình cần song song hóa.
 Thực nghiệm trên thuật toán Dijkstra, Prim tuần tự.
Luận văn tốt nghiệp


Trang 6

3. Phương pháp nghiên cứu
Xử lý song song là q trình xử lý gồm nhiều tiến trình được kích hoạt đồng thời và
cùng tham gia giải quyết một vấn đề, nói chung là thực hiện trên những hệ thống đa xử lý.
Một trong các mục đích chính của xử lý song song là nghiên cứu và xây dựng những thuật
tốn thích hợp để cài đặt trên các máy tính song song, nghĩa là phát triển các thuật toán
song song bằng phương pháp song song hóa các thuật tốn tuần tự. Để thấy rõ ý nghĩa xử
lý song song, chúng tơi chọn một bài tốn cụ thể đã có thuật tốn tuần tự, sau đó triển
khai giải quyết bài tốn này bằng thuật toán song song và so sánh hiệu năng giữa hai
phương pháp.

Trong phạm vi của đề tài, tôi đã chọn bài tốn tìm đường đi ngắn nhất trên đồ thị và
bài tốn tìm cây khung nhỏ nhất có trọng số làm ứng dụng để xử lý song song. Bài tốn
tìm đường đi ngắn nhất là một trong số những bài tốn tối ưu trên đồ thị tìm được những
ứng dụng rộng rãi trong thực tế cũng như những ứng dụng thú vị trong lý thuyết tổ hợp.
Bài toán được giải quyết bởi nhà khoa học máy tính người Hà Lan Edsger Dijkstra, bằng
thuật toán Dijkstra (xây dựng vào năm 1956 và được xuất bản vào năm 1959) - là một
thuật toán giải quyết bài toán đường đi ngắn nhất nguồn đơn trong một đồ thị có hướng
khơng có cạnh mang trọng số âm; Bài tốn tìm cây khung nhỏ nhất được ứng dụng trong
bài toán xây dựng hệ thống đường sắt, bài tốn nối mạng máy tính. Hiện nay đã có thuật
tốn tuần tự có thể tìm thấy trên internet. Trong q trình xây dựng thuật tốn, tơi chú ý
đến hai vấn đề, cài đặt nguyên bản các thuật tốn, đồng thời, nghiên cứu tìm ra các tiến
trình cần xử lý song song.
Tôi tập trung nghiên cứu về lý thuyết tính tốn song song, phương pháp xây dựng các
giải thuật song song, phương pháp chuyển đổi các giải thuật tuần tự sang giải thuật song
song và ứng dụng những nghiên cứu đó để cài đặt giải thuật và xây dựng chương trình
cho bài tốn tìm đường đi ngắn nhất dựa vào giải thuật tuần tự Dijkstra và bài tốn tìm
cây khung nhỏ nhất dựa vào giải thuật tuần tự Prim.
Kết quả mong muốn là chương trình có thể xử lý được đồ thị với dung lượng lớn, và
hoạt động trên nhiều BXL khác nhau.
Luận văn tốt nghiệp


Trang 7

4. Đối tượng nghiên cứu
Thuật tốn Dijkstra tìm đường đi ngắn nhất trên đồ thị có hướng đơn nguồn.
Thuật tốn Prim tìm cây khung nhỏ nhất trên đồ thị vơ hướng.
Thuật tốn song song và cách xây dựng thuật toán song song dựa trên thuật toán tuần
tự.
5. Phạm vi nghiên cứu

Không gian: nghiên cứu biến đổi những cấu trúc tuần tự để tận dụng được khả năng
song song tự nhiên của tất cả các thành phần trong hệ thống xử lý.
Thời gian: từ 31/01/2012 đến 26/05/2012
6. Nội dung nghiên cứu
Nghiên cứu thuật tốn tìm đường đi ngắn nhất và thuật tốn tìm cây khung nhỏ nhất.
Dựa trên cơ sở vận dụng thuật toán Dijkstra, Prim và lý thuyết thuật tốn song song, đề tài
nghiên cứu để tìm ra các tiến trình cần xử lý song song. Từ đó, xây dựng thuật tốn song
song phân chia cơng việc cho các bộ xử lý nhằm giảm thời gian xử lý.
7. Cấu trúc báo cáo
Báo cáo được tổ chức thành 3 chương. Chương mở đầu giới thiệu lý do chọn đề tài,
mục đích, phương pháp nghiên cứu để giải quyết vấn đề.
Chương 1 trình bày những kỹ thuật xử lý song song: bao gồm kiến trúc máy tính và
phân loại máy tính song song, giới thiệu các mơ hình lập trình song song thơng dụng, 5
ngun lý thiết kế thuật tốn song song, cách thức xây dựng một chương trình song song.
Chương 2 trình bày kỹ thuật JDBC và lập trình Socket TCP trong Java sử dụng trong
chương trình mơ phỏng thuật tốn.
Chương 3 phân tích thuật tốn Dijkstra và Prim tuần tự nhằm song song hóa. Thiết kế
chương trình demo và các kết quả đạt được.

Luận văn tốt nghiệp


Trang 8

CHƯƠNG 1 - LÝ THUYẾT XỬ LÝ SONG SONG
1.1. Kiến trúc và các loại máy tính song song
1.1.1. Kiến trúc máy tính
Kiến trúc máy tính nghiên cứu cách tổ chức để liên kết các thành phần của các hệ
thống máy tính. Máy tính được xây dựng từ các khối cơ sở:
+ Bộ nhớ: để lưu trữ dữ liệu.

+ Các đơn vị logic và số học (ALU): thực hiện các phép toán.
+ Các phần tử xử lý: điều khiển CU và truyền dữ liệu vào/ra.
+ Đường truyền dữ liệu.
Sự khác nhau chính của các máy tính là ở sự liên kết giữa các khối đó với nhau.
1.1.2. Phân loại máy tính song song
Dựa vào đặc tính về số lượng BXL, số luồng dữ liệu/ chương trình thực hiện, Michael
Flynn đã đưa ra cách phân loại theo hình 1 được nhiều người chấp nhận.

Hình 1. Phân loại hệ thống máy tính theo Flynn(1966)
SISD: (Đơn luồng lệnh, đơn luồng dữ liệu)
Máy tính loại SISD chỉ có một CPU, ở mỗi thời điểm thực hiện một chỉ lệnh và chỉ đọc,
ghi một mục dữ liệu. Tất cả các máy tính SISD chỉ có một thanh ghi được gọi là bộ đếm
chương trình được sử dụng để nạp địa chỉ của lệnh tiếp theo khi xử lý tuần tự và kết quả là
thực hiện theo một thứ tự xác định của các câu lệnh (hình 2).
Luận văn tốt nghiệp


Trang 9

Hình 2. Kiến trúc SISD
SIMD: (Đơn luồng lệnh, đa luồng dữ liệu)
Máy tính loại SIMD có một đơn vị điều khiển để điều khiển nhiều đơn vị xử lý thực
hiện theo một luồng các câu lệnh. CPU phát sinh tín hiệu điều khiển tới tất cả các phần tử
xử lý, những BXL này cùng thực hiện một phép toán trên các mục dữ liệu khác nhau,
nghĩa là mỗi BXL có luồng dữ liệu riêng. Đây là kiểu tính tốn lặp lại các đơn vị số học
trong CPU, cho phép những đơn vị khác nhau thực hiện trên những toán hạng khác nhau,
nhưng thực hiện cùng một lệnh. Máy tính SIMD có thể hỗ trợ xử lý kiểu véc tơ, trong đó
có thể gán các phần tử của véc tơ cho các phần tử xử lý để tính tốn đồng thời. Máy tính
véc tơ và các BXL mảng là mơ hình chủ yếu thuộc loại này (hình 3).


Hình 3. Kiến trúc SIMD

Luận văn tốt nghiệp


Trang 10

MISD: (Đa luồng lệnh, đơn luồng dữ liệu)
Máy tính loại MISD là ngược lại với SIMD. Máy tính MISD có thể thực hiện nhiều
chương trình (nhiều lệnh) trên cùng một mục dữ liệu, nên còn được gọi là MPSD (đa
chương trình, đơn luồng dữ liệu). Kiến trúc kiểu này có thể chia thành hai nhóm:
- Lớp các máy tính yêu cầu những đơn vị xử lý (PU) khác nhau có thể nhận được
những chỉ lệnh khác nhau để thực hiện trên cùng một mục dữ liệu. Đây là kiến trúc khó và
hiện nay chưa có loại máy tính nào được sản xuất theo loại này.
- Lớp các máy tính có các luồng dữ liệu được chuyển tuần tự theo dãy các CPU liên
tiếp. Đây là loại kiến trúc hình ống thực hiện xử lý theo véc tơ thông qua một dãy các
bước, trong đó mỗi bước thực hiện một chức năng và sau đó chuyển kết quả cho PU thực
hiện bước tiếp theo. Hoạt động của máy tính theo kiến trúc loại này giống như hệ tuần
hồn nên cịn được gọi là hệ tâm thu (hình 4).

Hình 4. Kiến trúc MISD
MIMD: (Đa luồng lệnh, đa luồng dữ liệu)
Máy tính loại MIMD cịn gọi là đa BXL, trong đó mỗi BXL có thể thực hiện những
luồng lệnh (chương trình) khác nhau trên các luồng dữ liệu riêng. Hầu hết các hệ thống
MIMD đều có bộ nhớ riêng và cũng có thể truy cập vào được bộ nhớ chung khi cần, do
vậy giảm thiểu được sự trao đổi giữa các BXL trong hệ thống. Đây là kiến trúc phức tạp
nhất, nhưng nó là mơ hình hỗ trợ xử lý song song cao nhất và đã có nhiều máy tính được
sản xuất theo kiến trúc này (hình 5).

Luận văn tốt nghiệp



Trang 11

Hình 5. Kiến trúc MIMD, bộ nhớ chia sẽ
1.1.3. Mơ hình trừu tượng của máy tính song song
Với mục đích thể hiện được những khả năng tính tốn của MTSS mà không quan tâm
đến những ràng buộc cụ thể của những máy tính có trong thực tế, người ta đưa ra mơ hình
trừu tượng của MTSS (hình 6).

Hình 6. Mơ hình trừu tượng MTSS dạng tổng qt MIMD
Khi phát triển thuật tốn cho MTSS, chúng ta giả sử: Khơng bị giới hạn về số lượng
BXL; Mọi vị trí của bộ nhớ đều truy cập được bởi bất kỳ BXL nào; Không bị giới hạn về
dung lượng bộ nhớ chia sẻ trong hệ thống; Các BXL có thể đọc bất kỳ một vị trí nào của
bộ nhớ. Thơng thường người ta xây dựng thuật toán song song cho MTSS, sau đó ánh xạ
Luận văn tốt nghiệp


Trang 12

sang máy tính cụ thể với các ràng buộc nào đó để chương trình thực hiện được trên máy
tính cụ thể đó.
1.2. Một số mơ hình lập trình song song thơng dụng
1.2.1. Mơ hình chia sẽ khơng gian bộ nhớ
Lập trình song song tường minh thường yêu cầu chỉ ra cụ thể các tác vụ song song
cùng với các tương tác giữa chúng. Những tương tác này có thể ở trong dạng đồng bộ
giữa các tiến trình đồng thời hay là sự giao tiếp giữa các kết quả liên quan. Trong kiến
trúc chia sẽ không gian bộ nhớ, giao tiếp giữa các tiến trình được chỉ ra là ngụ ý vì tất cả
các bộ xử lý đều có quyền truy cập vào một vài (hay tất cả) các bộ xử lý. Do đó, mơ hình
lập trình cho các máy tính chia sẽ khơng gian địa chỉ tập trung chủ yếu vào các cách thức

để thực thi đồng thời, đồng bộ hóa và những cách để làm giảm sự quá tải do tương tác.
Các mơ hình lập trình chia sẽ khơng gian địa chỉ có thể khác nhau về cách thức chia
sẽ dữ liệu, mơ hình đồng thời, và hổ trợ đồng bộ hóa. Các mơ hình giả sử rằng tất cả mọi
dữ liệu của tiến trình đều mặc định là khơng được truy cập, trừ khi nó cho phép làm điều
đó. Mặc dù đây là mơt yếu tố quan trọng nhằm bảo mật trong các hệ thống đa người dùng,
tuy nhiên khi chúng cùng nhau hợp tác để giải quyết cùng một vấn đề thì điều này khơng
cịn cần thiết. Các chi phí do bảo vệ dữ liệu gia tăng chỉ làm cho các tiến trình ít thích hợp
hơn cho lập trình song song. Ngược lại, các tiến trình và luồng giả sử toàn bộ bộ nhớ là
toàn cục, và chúng sẽ thực hiện trao đổi thông tin với nhau một cách tường minh thông
qua đọc và ghi lên biến chia sẽ. vì các tiến trình đều đọc và ghi lên bộ nhớ chung vào
cùng một thời điểm nên ta phải tính đúng đắn khi thao tác trên dữ liệu.
1.2.2. Mơ hình truyền thơng điệp
Giống như mơ hình chia sẻ bộ nhớ, các đơn vị xử lý song song trong mơ hình truyền
thơng điệp là các tiến trình. Tuy nhiên cũng có một số điểm khác nhau giữa hai mơ hình
này. Trong mơ hình truyền thơng điệp:

Luận văn tốt nghiệp


Trang 13

 Các tiến trình có thể thực hiện trên những BXL khác nhau và không truy cập được
vào không gian địa chỉ chia sẻ. Vì lý do này, những chương trình trao đổi thơng điệp với
nhau cịn được gọi là các chương trình phân tán.
 Chỉ có kênh truyền là có thể chia sẻ cho các tiến trình, thường đó là LAN hoặc
mạng diện rộng.
 Việc truyền thơng và đồng bộ hố hoạt động của các tiến trình được thực hiện
thông qua hai phương thức send() và receive().
 Tất cả các biến là cục bộ của các tiến trình. Vì thế, những vấn đề về xung đột dữ
liệu (cần phải khố dữ liệu khi một tiến trình truy cập), hay tranh chấp thơng tin (bài tốn

loại trừ nhau) khơng xuất hiện trong mơ hình tính tốn phân tán.
 Việc đồng bộ hố các tiến trình của một chương trình song song được thực hiện
theo cơ chế truyền thông điệp. Khi một tiến trình muốn gửi một thơng điệp thì nó phải
chờ cho đến khi tiến trình nhận sẵn sàng nhận thơng điệp đó và ngược lại, cũng tương tự.
Ở đây khơng có các buffer để tạm lưu giữ các thơng điệp cần trao đổi giữa các tiến trình.
1.2.3. Cấu trúc của những chương trình truyền thơng điệp
Các chương trình truyền thông điệp thường được viết bằng cách sử dụng mơ hình bất
đồng bộ hay ít đồng bộ. Trong mơ hình bất đồng bộ, tất cả mọi tác vụ song song được
thực thi một cách bất đồng bộ. điều này cho phép ta có thể triển khai bất cứ thuật tốn
song song nào. Tuy nhiên, những chương trình như vậy thường gặp khó khăn hơn để suy
ra và bên cạnh đó cách thể hiện của nó cũng khó mà đốn trước do những điều kiện về
thực thi. Ngược lại, những chương trình ít đồng bộ có thể kết hợp cả hai thái cực này.
Trong những chương trình như vậy, các tác vụ và những tập hợp con các tác vụ được
đồng bộ hóa để thực hiện những tương tác. Tuy nhiên giữa những tương tác này, các tác
vụ thực thi hồn tồn bất đồng bộ. Bởi vì những tương tác xãy ra một cách đồng bộ, nên
việc suy ra chương trình như vậy cũng khá dễ dành. Nhiều thuật tốn song song phổ biến
cũng được thực hiện một cách tự nhiên bằng cách sử dụng những chương trình ít đồng bộ
hơn.
Luận văn tốt nghiệp


Trang 14

Mơ hình truyền thơng điệp hỗ trợ thực thi cho các chương trình khác nhau trên từng
bộ xử lý. Điều này cung cấp tính mềm dẻo tối đa trong lập trình song song, nhưng điều
này cũng làm cho cơng việc viết các chương trình song song khơng thể mở rộng một cách
hiệu quả.
1.3. Thuật toán song song
1.3.1. Nguyên lý thiết kế thuật toán song song
Thuật toán song song là một tập các tiến trình hoặc các tác vụ có thể thực hiện đồng

thời và có thể trao đổi dữ liệu với nhau để kết hợp cùng giải một bài tốn đặt ra. Thuật
tốn song song có thể xem như là một tập hợp các đơn thể độc lập, một số trong số chúng
có thể thực hiện tương tranh trên MTSS.
Để thiết kế được các thuật toán song song cần phải trả lời các câu hỏi sau: Việc phân
chia dữ liệu cho các tác vụ như thế nào? Dữ liệu được truy cập như thế nào, những dữ
liệu nào cần phải chia sẻ? Phân các tác vụ cho các tiến trình (BXL) như thế nào? Các tiến
trình được đồng bộ ra sao?
Có năm ngun lý chính trong thiết kế thuật toán song song:
 Các nguyên lý lập lịch: Giảm tối thiểu các BXL sử dụng trong thuật toán sao cho
thời gian tính tốn là khơng tăng (xét theo khía cạnh độ phức tạp). Nói chung, nếu độ
phức tạp tính tốn của thuật tốn là O(f(n)) thì thời gian thực hiện của chương trình khi số
BXL giảm, có thể tăng và thời gian tính tốn tổng thể tăng lên một hằng số nào đó. Nghĩa
là xét theo khía cạnh độ phức tạp tính tốn vẫn khơng thay đổi, vẫn là O(f(n)).
 Nguyên lý hình ống: Nguyên lý này được áp dụng khi bài toán xuất hiện một dãy
các thao tác {T1, T2, . . ., Tn}, trong đó Ti+1 thực hiện sau khi Ti kết thúc.
 Nguyên lý chia để trị: Chia bài toán thành những phần nhỏ hơn tương đối độc lập
với nhau và giải quyết chúng một cách song song.
 Nguyên lý đồ thị phụ thuộc dữ liệu: Phân tích mối quan hệ dữ liệu trong tính tốn
để xây dựng đồ thị phụ thuộc dữ liệu và dựa vào đó để xây dựng thuật tốn song song.

Luận văn tốt nghiệp


Trang 15

 Nguyên lý điều kiện tranh đua: Nếu hai tiến trình cùng muốn truy cập vào cùng
một mục dữ liệu chia sẻ thì chúng phải tương tranh với nhau, nghĩa là chúng có thể cản
trở lẫn nhau.
Ngồi những ngun lý nêu trên, khi thiết kế thuật toán song song cịn một số điểm
cần quan tâm: Cấu hình tơ pơ liên kết mạng có ảnh hưởng lớn tới độ phức tạp tính tốn

của thuật tốn song song và thuật tốn song song phải được thiết kế dựa trên những kiến
thức về kiến trúc máy tính, ngơn ngữ LTSS và các phương pháp tính tốn.
1.3.2. Ba cách tiếp cận để thiết kế thuật toán song song
 Thực hiện song song hoá thuật toán tuần tự, biến đổi cấu trúc tuần tự để tận dụng
được khả năng song song tự nhiên của tất cả các thành phần trong hệ thống xử lý.
 Thiết kế thuật toán song song mới phù hợp với kiến trúc song song.
 Xây dựng thuật toán song song từ những thuật toán song song đã được xây dựng
cho phù hợp với cấu hình tơpơ và mơi trường song song thực tế.
Như vậy, cách làm khá thông dụng là biến đổi các thuật toán tuần tự về song song,
hay chuyển từ một dạng song song về dạng song song phù hợp hơn sao vẫn bảo tồn được
tính tương đương trong tính tốn. Do đó, khi biến đổi chúng ta cần trả lời hai câu hỏi:
Kiến trúc nào phù hợp cho bài toán? Và bài toán loại nào sẽ xử lý hiệu quả trong kiến trúc
song song cho trước? Ví dụ, máy tính kiểu SIMD khơng thích hợp để giải các bài tốn mà
trong đó có nhiều tiến trình dị bộ. Ngược lại, máy tính kiểu MIMD lại khơng hiệu quả để
giải quyết những bài tốn trong đó có nhiều tiến trình cần phải đồng bộ.
1.3.3. Cách thức xây dựng một chương trình song song
Phát triển thuật tốn là một phần quan trọng trong việc giải quyết vấn đề khi sử dụng
máy tính. Một thuật tốn tuần tự về cơ bản là một phương pháp hay là một chuỗi tuần tự
các bước cơ bản để giải quyết một vấn đề được đặt ra bằng cách sử dụng máy tính tuần tự.
Tương tự, một thuật toán song song là một phương pháp giải quyết vấn đề dựa trên việc
sử dụng nhiều bộ xử lý. Tuy nhiên để chỉ ra được một thuật tốn song song khơng đơn
giản là chỉ ra các bước cụ thể, mà là ở một mức độ nào đó. Một thuật tốn song song phải
Luận văn tốt nghiệp


Trang 16

được thêm vào tính đồng thời và người thiết kế ra thuật toán cũng phải chỉ ra tập hợp
những bước có thể xử lý đồng thời, điều này nhằm tận dụng được khả năng tính tốn của
các máy tính song song. Trong thực tế, việc thiết kế ra một thuật tốn song song là khá

phức tạp, nó có thể bao gồm một vài hay tất cả những điều sau:
 Chỉ ra những phần cơng việc có thể được thực thi đồng thời
 Ánh xạ các phần của công việc vào các bộ xử lý chạy song song
 Phân tán dữ liệu nhập, xuất, và trung gian cùng với chương trình.
 Quản lý truy cập vào dữ liệu chung của các bộ xử lý
 Đồng bộ hóa các bộ xử lý khi thực thi các chương trình song song

Luận văn tốt nghiệp


Trang 17

CHƯƠNG 2 - JDBC TRUY VẤN MYSQL
VÀ LẬP TRÌNH SOCKET TCP
2.1. JDBC
Đối với phần lớn những ứng dụng được xây dựng trên thực tế, việc lưu trữ thông tin
trong cơ sở dữ liệu là hết sức quan trọng. Với lượng dữ liệu khổng lồ mà các ứng dụng
này thường xuyên phải lưu trữ và xử lý trong quá trình hoạt động thì việc sử dụng một hệ
quản trị cơ sở dữ liệu (Database Management System - DBMS) là điều không thể thiếu
được khi triển khai ứng dụng.
Một ứng dụng khi được xây dựng bằng 1 ngơn ngữ lập trình cụ thể (C sharp, Java, …)
thường bao gồm 2 phần tách biệt :
 Phần giao diện chương trình và chức năng của ứng dụng : giao tiếp với người sử
dụng thông qua các chức năng lệnh mô tả cho khả năng làm việc của chương trình như :
khả năng nhập dữ liệu, truy xuất thơng tin, thống kê, tính tốn số liệu để đáp ứng cho nhu
cầu làm việc của người dùng …
 Phần cơ sở dữ liệu cung cấp thơng tin cho chương trình chính hoạt động, cho phép
lưu trữ thông tin mà người dùng nhập vào, cung cấp các khả năng cho phép chương trình
chính khai thác thơng tin dựa trên dữ liệu đã có để đáp ứng cho những nhu cầu cụ thể nào
đó của người dùng …

Do chương trình chính hoạt động phụ thuộc vào cơ sở dữ liệu đã được định nghĩa,
chính vì thế khi có các tác động của người dùng để thực hiện nhu cầu làm việc trong quá
trình sử dụng ứng dụng thì chương trình chính cần phải tạo ra 1 kết nối đến cơ sở dữ liệu
ở phía dưới để truy xuất thông tin hoặc thực hiện các lệnh cho nhu cầu lưu trữ,…. Để đáp
ứng nhu cầu này, Java cung cấp 1 giao diện lập trình (Java API – Application
Programming Interfaces) hỗ trợ cho các kết nối đến Database được gọi là JDBC – Java
Database Connectivity (hình 7).

Luận văn tốt nghiệp


Trang 18

Hình 7. Mơ hình trừu tượng cầu nối JDBC
2.1.1. Một số đặc điểm về JDBC
Đây là 1 thư viện chứa các lớp (Classes) và giao diện(Interfaces) cho phép lập trình
viên có thể thực hiện kết nối từ chương trình của mình đến cơ sở dữ liệu để lưu trữ thơng
tin và hỗ trợ cho q trình xử lý.
JDBC cho phép 1 chương trình viết bằng Java có thể truy xuất đến bất kỳ kiểu dữ liệu
nào của Database cũng như có thể thực thi trên tất cả các mơi trường có hỗ trợ máy ảo
Java (JVM – Java Vitural Marchine)
Về khía cạnh phát triển ứng dụng thì JDBC cho phép xây dựng 1 ứng dụng Java có
thể tác động đến nhiều loại Database khác nhau như : SQL Server, Oracle, MySQL, DB2,
Access, … với cùng 1 hình thức. Có nghĩa là với các loại Database khác nhau thì các đối
tượng được tạo ra bởi JDBC trong chương trình vẫn có thể sử dụng các cấu trúc lệnh phục
vụ cho việc thao tác dữ liệu (Tạo, Ghi, Truy vấn, …) trên Database không hề thay đổi dựa
trên cấu trúc truy vấn dữ liệu dạng SQL (Structure Query Language).
Điều này rất hữu ích trong tình huống: 1 ứng dụng ban đầu thiết kế sử dụng cơ sở dữ
liệu SQLServer nhưng sau đó vì 1 lý do đặc biệt mà phải chuyển sang sử dụng MySQL
thì phần mã lệnh của chương trình dùng cho việc truy xuất dữ liệu đến Database vẫn

không phải thay đổi gì nhiều, có chăng là điều chỉnh lại các thuộc tính cần thiết cho việc
kết nối Database loại khác mà thôi.
2.1.2. Kiến trúc JDBC
JDBC cung cấp kiến trúc two-tier (được xem như là Three-tier Data Processing
Models: kiến trúc truy xuất dữ liệu 3 tầng) trong đó ứng dụng viết bởi Java có tích hợp
JDBC được xem như là “Client machine” (First tier) thực hiện kết nối trực tiếp đến
Luận văn tốt nghiệp


Trang 19

Database chứa trên 1 máy chủ nào đó trong hệ thống mạng được coi là “Database server”
(Second tier). Lúc này JDBC API sẽ làm nhiệm vụ chuyển đổi tất cả các yêu cầu truy xuất
đến cơ sở dữ liệu thành một dạng thức chung và chuyển đến cho Database. Database thực
thi những yêu cầu này dựa trên cấu trúc lệnh SQL, sau đó hồi đáp kết quả cho JDBC và
JDBC sẽ chuyển những kết quả này lại cho chương trình chính viết bằng ngơn ngữ Java
để từ đó chương trình sẽ xử lý thơng tin và đáp ứng theo yêu cầu của người dùng.

Hình 8. Kiến trúc tổng quát JDBC
Trong lý thuyết được mô tả ở trên, kiến trúc JDBC được xem như là kiến trúc 2 tầng
đối với máy, trong đó máy tính thực thi ứng dụng viết bởi Java để giao tiếp với người
dùng được xem như tầng thứ nhất (First tier) và máy tính chứa Database được xem như
tầng thứ 2 (Second tier) (Dĩ nhiên Database vẫn có thể chứa trên cùng máy tính với
chương trình ứng dụng chạy ở lớp trên).
Kiến trúc truy xuất dữ liệu 3 tầng (Three-tier Data Processing Models) sử dụng JDBC
được mơ tả như sau : người dùng thơng qua trình duyệt truy xuất ứng dụng của ta thông
qua Internet được coi như tầng thứ nhất (First tier). Tất cả các yêu cầu truy xuất của người
dùng sẽ được chương trình đặt tại Server tiếp nhận (Middle tier còn gọi là Proxy Server)
và thực hiện kết nối trực tiếp đến Database Server (Third tier) thông qua JDBC. Database
server thực thi các yêu cầu truy vấn cơ sở dữ liệu và hồi đáp kết quả cho chương trình

chính (Proxy Server) thơng qua JDBC, lúc này chương trình chính sẽ hồi đáp kết quả cho
máy tính của người dùng và được xuất I/O. Với kiến trúc này, mọi yêu cầu truy vấn từ
phía người dùng cũng như những kết quả hồi đáp từ Database Server đều phải thơng qua
“Middle tier” chính là chương trình chính do ta viết và đặt tại “hosting”, chương trình này
Luận văn tốt nghiệp


Trang 20

sẽ tiến hành kiểm tra, sàng lọc thông tin trước khi chuyển kết quả (yêu cầu) truy vấn cho
“tầng trước” (hay “tầng kết tiếp”). Do đó đặc thù của kiến trúc này sẽ làm tăng mức độ
bảo mật đối với dữ liệu của chương trình lên rất nhiều.
Các kiểu kết nối với Database
JDBC API cung cấp 1 thành phần gọi là JDBC Drivers. JDBC Drivers có nhiệm vụ
chuyển đổi các yêu cầu truy xuất từ Client để DBMS có thể hiểu và thực thi những yêu
cầu này trên Database của chương trình, tương tự, khi nhận được kết quả hồi đáp từ
Database, JDBC Driver sẽ chuyển đổi ngược về dạng thức mà chương trình viết bởi Java
có thể hiểu và nhận dạng được. Có 4 kiểu kết nối đến Database bằng JDBC như mô tả
dưới đây:
 ODBC – JDBC Bridge (Loại I)
 Native API-Java/ Partly Java (Loại II)
 JDBC Network – All Java (Loại III)
 Native protocol – All Java (Loại IV)
2.1.2.1. JDBC Driver Loại I
Chúng là các trình điều khiển cầu nối JDBC-ODBC. Chúng ủy nhiệm công việc truy
cập dữ liệu cho ODBC API. Chúng là trình điều khiển chậm nhất trong số còn lại. SUN
cung cấp một phần mềm trình điều khiển JDBC/ODBC.

Hình 9. JDBC Driver loại 1
Ưu điểm: Có thể truy xuất đến nhiều loại Database khác nhau đã tồn tại trong hệ điều

hành dưới dạng các DSN có sẵn trong hệ thống (System Data Source Name) một cách
linh hoạt.
Luận văn tốt nghiệp


Trang 21

Nhược điểm: có hai nhược điểm cần phải nói đến đối với Type I của JDBC
 Thứ nhất : hình thức kết nối này khơng thuận tiện cho việc cài đặt và chuyển giao
ứng dụng cho khách hàng (Người dùng chương trình do chúng ta viết) bởi lý do kiểu kết
nối này không hỗ trợ cho việc cài đặt ứng dụng, vì thế khi chuyển giao ứng dụng, ta buộc
phải tạo ra 1 DSN trên máy sẽ chạy ứng dụng của mình, đồng thời bộ thư viện dùng cho
ODBC đối với hệ quản trị cơ sở dữ liệu mà chương trình sử dụng cũng phải được cài đặt
trên máy đó.
 Thứ hai: ODBC Driver khi hoạt động cần phải có một số DLL đi kèm, chính vì thế
nó khơng thích hợp cho việc xây dựng các ứng dụng Web chạy trên trình duyệt (do một
số lí do về bảo mật đối với dữ liệu của ứng dụng). Kiểu kết nối này được khuyến cáo là
chỉ nên dùng cho các ứng dụng đơn thuần chạy trên hệ điều hành của máy khách hàng mà
thôi
2.1.2.2. JDBC Driver Loại II
Chúng chủ yếu sử dụng API mã nền để truy cập dữ liệu và cung cấp các lớp bao Java
để có thể được gọi ra bằng cách dùng các JDBC driver.

Hình 10. JDBC Driver loại 2
Ưu điểm: Loại kết nối này có khả năng thực thi tốt hơn so với hình thức kết nối thứ
nhất do tất cả các yêu cầu từ phía chương trình đều được chuyển đổi thành các dạng thức
cụ thể đối với từng loại Database mà chương trình truy xuất tới.
Nhược điểm: Cũng giống như hình thức kết nối thứ nhất, kiểu kết nối này cũng
không hỗ trợ cho việc phát triển ứng dụng khi cài đặt trên máy tính của khách hàng.
Luận văn tốt nghiệp



Trang 22

Chính vì thế, nếu chương trình sử dụng kiểu kết nối này thì khi cài đặt, ta cũng phải tiến
hành cài đặt các API cần thiết tương ứng với mỗi kiểu Database cụ thể khác nhau. Và việc
cần phải có các thư viện cơ sở cho database đặt tại máy chủ cũng làm giảm hiệu xuất thực
thi của chương trình.
2.1.2.3. JDBC Driver Loại III
Chúng được viết thuần bằng Java và sử dụng giao thức Net độc lập nhà sản xuất để
truy cập đến trình theo dõi từ xa độc lập nhà sản xuất. Trình theo dõi này đến lượt nó lại
ánh xạ các lời gọi độc lập nhà sản xuất này vào các lời gọi phụ thuộc nhà sản xuất. Bước
đặc biệt này đã làm tăng độ phức tạp và giảm tính hiệu quả trong truy cập cơ sở dữ liệu.

Hình 11. JDBC Driver loại 3
Ưu điểm: Loại kết nối này được coi là linh hoạt nhất, không yêu cầu bất cứ 1 thư
viện hay trình điều khiển nào cần phải cài đặt trên máy khách. Kiểu kết nối này làm cho
ứng dụng (sản phẩm của chúng ta) có khả năng thích ứng cao trong việc phát triển do dễ
thay đổi, kiểm sốt tốt mà khơng cần thiết phải sửa đổi tại máy tính của khách hàng.
Nhược điểm: Vì mã lệnh dùng cho truy xuất cơ sở dữ liệu được thực hiện tại middletier vì vậy cần phải có những giải pháp hỗ trợ bảo mật thích hợp cho việc truy xuất và
khai thác cơ sở dữ liệu (Kiểu kết nối này chủ yếu hỗ trợ cho các ứng dụng chạy trên nền
Web). Ví dụ như sử dụng firewall để kiểm sốt truy cập từ bên ngồi.
2.1.2.4. JDBC Driver Loại VI
Chúng được viết thuần túy bằng Java và là loại hiệu quả nhất. Chúng cho phép kết nối
trực tiếp vào cơ sở dữ liệu, cung cấp kết quả tối ưu và cho phép lập trình viên thực hiện
các chức năng tùy thuộc vào cơ sở dữ liệu cụ thể. Điều này đã tạo ra tính cơ động cao
Luận văn tốt nghiệp


Trang 23


nhất là khi bạn cần thay đổi cơ sở dữ liệu bên dưới một ứng dụng. Loại driver này thường
được dùng cho các ứng dụng phân tán cao. SUN khuyến cáo sử dụng và phát triển các
trình điều khiển loại 4 trong các ứng dụng.

Hình 12. JDBC Driver loại 4
Ưu điểm: kết nối cơ sở dữ liệu kiểu 4 sử dụng phương pháp kết nối trực tiếp thông
qua Sockets (Mà không phụ thuộc vào các “Middleware” trung gian hay các thư viện
chuyển đổi) cho nên đây là loại kết nối được xem là nhanh nhất trong số những dạng kết
nối có thể sử dụng bằng Java. Hơn nữa việc không cần phải cài đặt các driver chuyển đổi
phục vụ cho giao tiếp với cơ sở dữ liệu tại máy khách làm cho việc chuyển giao ứng dụng
cho người dùng được thuận tiện hơn.
Nhược điểm: Hạn chế duy nhất cho loại này xảy ra trong trường hợp nếu phải thay
đổi DBMS khác thì đơn vị phát triển ứng dụng buộc phải xây dựng lại bộ driver để có thể
truy xuất được vào Database mới cho phù hợp.
2.1.3. Các lớp chủ yếu chịu trách nhiệm thiết lập kết nối
DriverManager - Nạp các JDBC driver vào trong bộ nhớ. Có thể sử dụng nó để mở
các kết nối tới một nguồn dữ liệu.
Connection - Biểu thị một kết nối đến một nguồn dữ liệu. Được dùng để tạo ra các đối
tượng Statement, PreparedStatement và CallableStatement.
Statement - Biểu diễn một lệnh SQL tĩnh. Có thể sử dụng nó để thu về đối tượng
ResultSet.
PreparedStatement - Một giải pháp thay thế hoạt động tốt hơn đối tượng Statement,
thực thi một câu lệnh SQL đã được biên dịch trước.
Luận văn tốt nghiệp


Trang 24

CallableStatement - biểu diễn một thủ tục được lưu trữ. Có thể được sử dụng để thực

thi các thủ tục được lưu trữ trong một RDBMS có hỗ trợ chúng.
ResultSet - biểu diễn một tập kết quả trong cơ sở dữ liệu tạo ra bởi việc sử dụng một
câu lệnh SQL là SELECT.
SQLException - một lớp xử lý lỗi ngoại lệ chứa các lỗi truy cập cơ sở dữ liệu.
DataSource - Trừu tượng hóa một nguồn dữ liệu. Đối tượng này có thể sử dụng thế
cho
DriverManager để tạo ra một cách có hiệu quả các kết nối cơ sở dữ liệu (có khả năng
sử dụng việc chứa/phân chia các đường kết nối ngầm).
Tạo sẵn cơ chế phân chia đường kết nối (built-in connection pooling).
XADataSource, XAConnection – Cho phép/Hỗ trợ các giao dịch phân phối.
RowSet - Nó mở rộng giao diện ResultSet để tăng thêm sự hỗ trợ đối với các tập kết
nối bị ngắt.
2.1.4. Các Bước Cơ Bản Khi Làm Việc Với JDBC
Trong quá trình xây dựng và phát triển ứng dụng, việc sử dụng 1 hệ quản trị cơ sở dữ
liệu để lưu trữ thông tin và hỗ trợ cho quá trình xử lý của chương trình là điều rất cần
thiết. Như vậy việc tạo, duy trì và thao tác trên 1 kết nối đến cơ sở dữ liệu dùng cho
chương trình là hết sức quan trọng. Trong phạm vi của bài viết này, tôi muốn giới thiệu
tới các bạn những bước cơ bản nhất cần phải nắm được khi làm việc với JDBC (Java
Database Conectivity).
Với một chương trình viết bởi ngơn ngữ Java có sử dụng JDBC cho việc giao tiếp với
cơ sở dữ liệu thì bạn phải thực hiện 5 bước như sau:
 Nạp trình điều khiển kết nối (Load Driver).
 Thiết lập kết nối đến cơ sở dữ liệu thông qua “Connection String” (Establish a
database connection).
 Tạo và thực thi 1 câu lệnh truy vấn đến cơ sở dữ liệu (Create and execute an SQL
Statement).
Luận văn tốt nghiệp


Trang 25


 Xử lý kết quả nhận về sau khi thi hành lệnh truy vấn thành công trên cơ sở dữ liệu
(Process the results).
 Đóng kết nối và giải phóng tài nguyên đã dành cho kết nối đó (Close the database
connection).
Bước 1: Nạp trình điều khiển kết nối (Load Driver)
Để tiến hành nạp trình điều khiển kết nối, bạn phải dùng phương thức forName của
lớp Class để tạo ra 1 thể hiện của lớp kết nối dựa trên giao thức mà JDBC cung cấp. Cú
pháp của lệnh này như sau:
public static Class.forName(String className) throws ClassNotFoundException
Ví dụ : Giả sử bạn muốn sử dụng kết nối theo kiểu 1 của JDBC (ODBC-JDBC
Bridge) thì câu lệnh để load driver cho kiểu này có thể viết như sau:
Class.forName(“jdbc:odbc:JdbcOdbcDriver”);
Ghi chú: Chuỗi “jdbc:odbc:JdbcOdbcDriver” dùng làm tham số của hàm chính là
giao thức điều khiển dành cho kết nối loại 1 của JDBC
Trong trường hợp khác, bạn muốn kết nối đến cơ sở dữ liệu bằng kiểu kết nối thứ 2
của, ta có thể thực hiện như sau:
Class.forName("com.mysql.jdbc.Driver");
Ghi chú: Trong tình huống này thì chuỗi “com.mysql.jdbc.Driver” dùng làm tham số
của hàm chính là giao thức điều khiển dành cho kết nối loại 2 của JDBC đối với cơ sở dữ
liệu MySql, là phương pháp mà đề tài đã sử dụng.
Bước 2: Thiết lập kết nối đến cơ sở dữ liệu (Establish a database connection)
Để thực hiện bước thứ 2 này, bạn phải tạo 1 đối tượng của lớp Connection để nhận
kết quả trả về của phương thức getConnection, đây là phương thức tĩnh của lớp
DriverManager có nhiệm vụ kiểm tra xem trong thư viện đã được cài đặt của Java có trình
điều khiển kết nối thích hợp ứng với chuỗi kết nối mà lập trình viên đã mô tả và truyền
vào thông qua tham số của hàm hay không. Nếu thỏa mãn, 1 đối tượng thuộc lớp
Connection sẽ trả về cho phép chương trình có thể thực hiện các tác động cần thiết xuống
cơ sở dữ liệu tông qua đối tượng này (nếu không thành công, 1 đối tượng thuộc lớp
Luận văn tốt nghiệp



×